我有一个"跨平台"目前使用两个代码存储库的应用程序,相对独立地维护,并根据目标平台(分别为win或mac)使用VS / Xcode构建。我在之前的几个项目中使用它后爱上了Premake,并且我试图将我的所有代码整合到一个交叉编译的代码库中。
我不想依赖Xcode,而是希望任何开发人员能够使用Xcode或gmake在Mac上构建。我有一个非标准的框架,我想链接到并包含在存储库中(它不会位于/ Library / Frameworks或任何默认的mac框架搜索路径中)。我已将框架文件添加到项目/lib/TheFramework.framework
的目录中。我的预制文件在项目定义下包含以下内容:
includedirs {".", "lib", "lib/TheFramework.framework/Headers"}
libdirs {"lib"}
links {"TheFramework.framework"}
当我编译时,(运行$ premake5 gmake
然后$ make
),我得到一个未找到头文件的错误。我的搜索路径有问题吗?我错过了某个地方的路径或旗帜吗?
谢谢!
答案 0 :(得分:0)
在看看你需要做什么预制之前,让我们先来看看幕后需要做些什么。
在gcc或clang上使用非标准框架编译mac程序时(这是你生成的make文件所做的),有必要做两件事:
-framework TheFramework
指定框架的名称 - 这是premake在您提供links {"TheFramework.framework"
时所做的事情-F /Path/To/Framework/
指定框架的位置 - 目前不由premake自动处理。我做了一个简单的测试c程序,它使用SDL2框架并用gcc编译它: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