我有一个项目,它的结构大致如下:
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脚本“告诉”这些子项目“这里是includedirs/sysincludedirs的基础”?即使它涉及到以不同的方式编写这些依赖项目来接受该信息?
例如(我要强调的是,我对Lua或Premake了解的还不够多,不知道这有多大意义),我的模块可能会说“确保设置了MODULE_INCLUDE_BASE和MODULE_SYS_INCLUDE_BASE”,然后使用:
project "moduleA"
-- etc
include { "%{MODULE_INCLUDE_BASE}/moduleB/include" }然后,更高级别的依赖项目可以...准备好了吗?...在包含依赖项配置之前,请使用这些变量。(再说一次,这只是一个例子,也许有一种更优雅的方法。)
发布于 2019-02-02 04:12:46
一种选择是通过将项目调用包装在函数本身中来推迟计算:
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()
-- ...然后,相对于这个顶层脚本来完成包含。
发布于 2019-03-25 00:17:14
我建议检查导出模块中的premake https://github.com/Meoo/premake-export
项目可以定义需要导出到其他库或应用程序的内容。反过来,其他库可以导入它们所依赖的项目,这非常方便,语法也非常有表现力!
https://stackoverflow.com/questions/54472922
复制相似问题