【发布时间】:2014-10-17 14:59:55
【问题描述】:
我目前正忙着尝试使用全新的工具链 Assimp 在 Xcode6 上使用新的 iOS 8.0 SDK 编译一个中等大小的库。
与项目捆绑在一起的是各种脚本和 Xcode 项目,它们具有在 iOS 上构建的配置,但不幸的是,它们都不是开箱即用的。
到目前为止,我得到的最远的是使用构建脚本,该脚本使用 cmake "Unix Makefiles" 方法来组装静态库。其他方法包括使用 cmake 生成 Xcode 项目以用于构建。我尝试过也无济于事,存储库中项目附带的 Xcodeproject 也没有(后来我了解到在其中一个自述文件中被标记为已弃用)。
好的,所以有了这个“Unix Makefiles”cmake 脚本,我已经能够生成一些静态库(在手动强制在主 CMakeLists.txt 内生成静态库之后),但是当它继续为 @987654325 构建时@ 和 x86_64 的 iPhoneSimulator 架构,它不断拉入 iOS 的标头,导致大量编译器错误。
幸运的是,我凭直觉找到了 assimp/code/CMakeFiles/assimp.dir/flags.make,这是 cmake 生成的文件之一,你瞧,整个 cflags 都在这里,一旦我删除了流氓头包含路径,make 调用终于成功了,我有了我的 iPhoneSimulator 静态库!
好的,所以我的问题基本上是在调试这些令人沮丧的 cmake 问题时从哪里开始。我与 cmake 的关系一直很紧张,因为 cmake 的复杂性和设计原则对我来说都没有任何意义,而且 cmake 构建开箱即用的情况很少见……它总是>几乎可以工作,但是我不得不花几个小时用make VERBOSE=1进行调试,然后随意查看生成的文件,这些文件当然都标有警告,因为它们是生成的文件,所以不要编辑它们。
我意识到here 的一些变量可能与我的麻烦有关。但我不清楚如何调试这些变量。我在哪里打印这些变量,以便我可以找到哪个变量包含错误值?例如,在最近的这种情况下,我有一个 -I 标志出现在错误的位置。幸运的是,我能够使用涉及grep 的各种大锤方法找到包含它的文件,但我还没有接近实际修复构建配置以使该过程在未来不那么痛苦。
【问题讨论】:
-
查看构建文件夹中的
CMakeCache.txt。这包含所有缓存变量的值,通常是一个很好的起点。请注意,如果您不太了解 CMake,那么其中大部分内容对您来说可能仍然像希腊语。调试一个不是你写的项目的构建系统从来都不是一件令人愉快的事情,而且 CMake 固有的复杂性对缓解这个问题几乎没有帮助。
标签: cmake