Может ли Premake распространять включенные в проекты зависимости?

У меня есть проект, который примерно структурирован как:

main.c
premake5.lua

moduleA/
  premake5.lua
  include/modulea.h
  src/modulea.c

moduleB/
  premake5.lua
  include/moduleb.h
  src/moduleb.c

Мой верхний уровень premake5.lua довольно просто:

workspace "myproject"
    configurations { "Debug", "Release" }

    include "moduleA"
    include "moduleB"

    project "myproject"
        kind "ConsoleApp"
        language "C"

        files { "main.c" }
        includedirs { "." }

        links { "moduleA" , "moduleB" }

Я хотел бы иметь возможность выражать конфигурацию / зависимости моих модулей без жестких кодировок, используемых в содержащем проекте. Модули A и B будут повторно использоваться в других проектах, поэтому я хочу избежать необходимости:

project "moduleA"
  kind "StaticLib"
  -- files, etc
  include { "..", "../moduleB/include" }
  links { "moduleB" }

Строки включения, содержащие .. делает предположения о структуре родительского проекта, которые могут не всегда выполняться.

Есть ли какой-нибудь способ для сценария Premake более высокого уровня, чтобы "сказать" этим подпроектам, вот база для включенных /sysincludedirs"? Даже если это предполагает написание этих зависимых проектов другим способом, чтобы принять эту информацию?

Например (и позвольте мне подчеркнуть, что я не знаю достаточно Lua или Premake, чтобы понять, насколько это имеет смысл), мои модули могут сказать "убедитесь, что вы установили MODULE_INCLUDE_BASE а также MODULE_SYS_INCLUDE_BASE"и затем используйте:

project "moduleA"
  -- etc
  include { "%{MODULE_INCLUDE_BASE}/moduleB/include" }

Зависимые проекты более высокого уровня могут затем... установить?... эти переменные, прежде чем включать конфиги зависимостей. (Опять же, это всего лишь пример, может быть, есть более элегантный способ сделать это.)

1 ответ

Я бы предложил проверить модуль экспорта для предварительного приготовления https://github.com/Meoo/premake-export

проекты могут определять вещи, которые необходимо экспортировать в другие библиотеки или приложения. В свою очередь, другие библиотеки могут импортировать проекты, от которых они зависят. Это очень удобно, а синтаксис очень выразителен!

Один из вариантов - отложить оценку, поместив вызов проекта в саму функцию:

function project_A()
    project "moduleA"
        kind "StaticLib"
        language "C"
        files { "moduleA/src/*.c" }
        includedirs { '.' }
end

Когда это вызывается с верхнего уровня premake5.lua, '.' оценивается в контексте скрипта верхнего уровня:

workspace "myproject"
    configurations { "Debug", "Release" }

    include "moduleA"
    include "moduleB"

    module_process()
    module_protocol()

    -- ...

Включения затем делаются относительно этого сценария верхнего уровня.

Другие вопросы по тегам