【发布时间】:2011-10-18 09:01:20
【问题描述】:
我需要一些关于如何为 CMake 自动生成 CMakeLists.txt 文件的指针/建议。有谁知道任何现有的发电机?我检查了CMake Wiki 中列出的那些,但不幸的是它们不适合我。
我已经有一个基本的 Python 脚本,它遍历我的项目的目录结构并生成所需的文件,但它现在真的很“愚蠢”。我想对其进行扩充以考虑到例如我正在构建的不同平台、我正在使用的编译器\交叉编译器或我可能拥有的不同版本的库依赖项。我在 CMake 方面没有太多\专家经验,我可以为我的工作提供一个示例,或者一个已经工作的生成器可能会有很大帮助。
【问题讨论】:
-
应该真的很蠢。您真的不希望执行目录遍历的代码了解平台或任何复杂的东西。在项目级配置中隔离该代码。
-
@Tom K 我没有进行平台特定的目录遍历,只是在我的项目结构中,无论平台如何,它都是相同的。我不明白为什么这会造成问题。我需要根据我正在构建的实际平台选择\取消选择一些选项,包括目录等。
-
@Nicol Bolas CMake 有自己的脚本语言。您可以在 CMake 文件中包含条件等,因此它在某种程度上是可编写脚本的。不幸的是,我无法切换到 Premake。
-
实际上,在重构了一些构建系统之后.. 我发现最好让 CMakeLists.txt 包含所有源文件的完整、哑列表,并使源文件本身包含必要的编译守卫。因此,您的所有 Linux、Windows、ARM 等特定文件始终编译/包含在项目中,但源文件本身具有预处理器条件,将它们排除在构建之外。因此,您几乎总是可以在任何给定目录中使用“gcc -I. *.cpp”。如果那不是一个选项,您必须在 cmakelists.txt 中手动执行 if
-
还有另一个很有帮助的提示:如果您在 earch 目录中通过愚蠢的 python 脚本生成完整的文件列表,请说“files.cmake”并让 CMakeLists.txt 随处可见,只需在顶部,您可以在 cmake 脚本中对生成的列表进行后期编辑。因此,如果您的 files.cmake 创建了一个 CMake 变量 SOURCES,只需执行 if(win32) list(remove SOURCES posix-specific-code.cpp) endif()