在查看您需要使用 premake 做什么之前,让我们先看看需要在引擎盖下发生什么。
在 gcc 或 clang 上使用非标准框架编译 mac 程序时(这是生成的 make 文件所做的),有必要做两件事:
- 指定框架的名称,通过
-framework TheFramework
- 这是 premake 在你提供它时所做的links {"TheFramework.framework"
- 指定框架的位置,通过
-F /Path/To/Framework/
- premake 目前不会自动处理。
我制作了一个使用 SDL2 框架并使用 gcc 编译的简单测试 c 程序:https ://gist.github.com/JohannesMP/6ff3463482ebbdc82c2e - 请注意,当我离开-F /...
标志时,我会收到一个可能类似的错误对你所描述的。
所以发生的事情是,尽管您提供了包含目录的 premake,但 premake 不会添加正确的-F
标志。
解决此问题的一种方法是执行以下操作:
configuration {"macosx", "gmake"}
buildoptions {"-F /Path/To/Framework"}
linkoptions {"-F /Path/To/Framework"}
(参见这里的示例项目:https ://gist.github.com/JohannesMP/9a9b5263c127103f1861#file-premake5-lua-L24-L26 )
在 premake5 中,这将盲目地将提供的代码附加到构建步骤和链接步骤。有必要为构建和链接都这样做。
请记住,由于 premake 不会处理或检查构建/链接选项是否有效,如果提供的路径在他们的机器上不存在,用户将收到错误消息。例如,虽然您的用户特定目录中可能有一个框架~/Library/Frameworks
,但由于默认情况下该文件夹不存在,另一个用户可能正在使用全局/Library/Frameworks
,并且当他们尝试使用 gmake 编译您的 premake 项目时,他们会收到警告:
ld: warning: directory not found for option '-F/Users/<NAME>/Library/Frameworks'
在这一点上,似乎没有“安全”的方式让 premake5 尝试包含框架路径,但这可能会在未来发生变化。
查看我在 premake repo 上发布的这个问题:https ://github.com/premake/premake-core/issues/196