我有一个项目,其结构大致如下:
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" }
包含..
的include行对并非总是成立的父项目结构进行了假设。
是否有某种方式可以使高级Premake脚本“告诉”这些子项目“这是includeirs / sysincludedirs的基础”?即使涉及以不同方式编写那些依赖项项目来接受该信息?
例如(并且让我强调,我对Lua或Premake的了解不多,不足以使人理解),我的模块可以说“确保设置MODULE_INCLUDE_BASE
和MODULE_SYS_INCLUDE_BASE
”,然后使用:
project "moduleA"
-- etc
include { "%{MODULE_INCLUDE_BASE}/moduleB/include" }
然后可以在包含依赖项配置之前...设置?...这些变量。 (同样,这只是一个例子,也许有一种更优雅的方法可以做到这一点。)
答案 0 :(得分:0)
一种选择是通过将项目调用包装在函数本身中来推迟评估:
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()
-- ...
然后相对于此顶级脚本进行包含。
答案 1 :(得分:0)
我建议检查导出模块中的预制件 https://github.com/Meoo/premake-export
项目可以定义需要导出到其他库或应用程序的内容。 反过来,其他库也可以导入它们依赖的项目 它非常方便,语法也很富有表现力!