Я хотел бы иметь возможность создать собственное переопределение для добавления свойства VcpkgConfiguration на основе нашей текущей конфигурации.
У нас есть проект C++, в котором используются Premake и vcpkg. Мы обнаружили, что vcpkg конфликтует с другими проектами, включающими собственные версии подобных библиотек, поэтому мы не можем использовать предоставляемую им глобальную интеграцию. Вместо этого мы добавили его в качестве подмодуля в наш проект и связали его с помощью премейка с пользовательским переопределением:
p.override(p.vstudio.vc2010, "importExtensionTargets", function(base, prj)
p.push('<ImportGroup Label = "ExtensionTargets">')
p.callArray(p.vstudio.vc2010.elements.importExtensionTargets, prj)
p.pop('</ImportGroup>')
p.push('<ImportGroup Label = "ExtensionTargets">')
p.w('<Import Project = "$(SolutionDir)External/vcpkg/scripts/buildsystems/msbuild/vcpkg.targets"/>')
p.pop('</ImportGroup>')
end)
К сожалению, в нашем проекте мы не используем обычные конфигурации «Отладка» или «Выпуск», поэтому vcpkg по умолчанию не линкуется правильно. Чтобы обойти эту проблему, мы изменили файл vcpkg.targets, чтобы он распознавал нашу конфигурацию в локальной ветке. Это не идеально, так как вынуждает нас перебазировать нашу ветку vcpkg, чтобы обновить ее, и потенциально может конфликтовать, если этот файл когда-либо будет изменен в их репо.
Файл целей позволяет вам установить свойство VcpkgConfiguration перед включением цели, что мы и хотели бы сделать.
По сути, мы хотели бы иметь возможность вызывать команду через фильтры следующим образом:
filter {"configurations:<SomeConfiguration>"}
VcpkgConfig "Debug"
Что бы добавить это внутри группы свойств
<VcpkgConfiguration>Debug</VcpkgConfiguration>
Как мы можем это сделать?





Кажется, проблема в том, что importExtensionTargets относится к проекту, но вам нужно это для каждой конфигурации.
Вы можете попробовать зарегистрировать свое ключевое слово
api.register {
name= "VcpkgConfig",
scope = "config",
kind = "string",
}
затем в вашей пользовательской функции
-- loop over all configurations
for _, cfgName in ipairs(prj.configurations) do
-- find config
local cfg = project.findClosestMatch(prj, cfgName)
if cfg.VcpkgConfig then
p.push('<ImportGroup Label = "ExtensionTargets">')
p.push('<VcpkgConfiguration>'.. cfg.VcpkgConfig .. '</VcpkgConfiguration>')
p.w('<Import Project = "$(SolutionDir)External/vcpkg/scripts/buildsystems/msbuild/vcpkg.targets"/>')
p.pop('</ImportGroup>')
end
Не испытано. Будет ли это работать?
API.register был именно тем, что я искал, спасибо! второй раздел я не использовал, вместо этого я переопределил "configurationProperties"