Может ли 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()
-- ...
Включения затем делаются относительно этого сценария верхнего уровня.