Premake override для Vcpkg - PullRequest
       21

Premake override для Vcpkg

0 голосов
/ 05 июля 2019

Я хотел бы иметь возможность создать пользовательское переопределение для добавления свойства VcpkgConfiguration на основе нашей текущей конфигурации.

У нас есть проект на C ++, который использует Premake и vcpkg. Мы обнаружили, что vcpkg конфликтует с другими проектами, которые включают собственные версии похожих библиотек, поэтому мы не можем использовать предоставляемую им глобальную интеграцию. Вместо этого мы добавили его как субмодуль в наш проект и связали его с помощью premake с пользовательским переопределением:

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)

К сожалению, мы не используем обычные конфигурации "Debug" или "Release" в нашем проекте, поэтому vcpkg по умолчанию не связывается правильно. Чтобы обойти эту проблему, мы изменили файл vcpkg.targets для распознавания нашей конфигурации в локальной ветке. Это не идеально, так как вынуждает нас перебазировать нашу ветку с vcpkg, чтобы обновить ее, и может потенциально конфликтовать, если этот файл когда-либо будет изменен в их репо.

Файл целей позволяет вам установить свойство VcpkgConfiguration перед включением цели, что мы и хотели бы сделать.

В основном мы хотели бы иметь возможность вызывать команду с помощью фильтров, таких как:

filter {"configurations:<SomeConfiguration>"}
    VcpkgConfig "Debug"

Что бы добавить это в группу свойств

<VcpkgConfiguration>Debug</VcpkgConfiguration>

Как мы можем это сделать?

1 Ответ

0 голосов
/ 05 июля 2019

Кажется, проблема в том, что 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

Не проверено.Будет ли это работать?

...