我使用 CMake 来配置、构建和安装 C++ 代码。我已经定义了一些用户选项。我添加了一个选项,让 CMake 下载外部依赖项。等等等等。
目前,有关 CMake 的所有内容都写在单个文件 CMakeLists.txt 中。还有一个配置文件“config.cmake”,它允许用户定义各种参数,例如详细级别、库路径、编译器标志等。
什么是 CMake 的良好文件组织?CMakeLists.txt 文件是否应该分成子文件?
非常感谢您的帮助!
一个好的文件组织取决于你的 CMake 逻辑有多大,或者你期望它有多大。通常来说,一般来说:
可能会被大量重用的功能,您可能希望组织成“每个主题”的 .cmake 文件,其中包含宏,并将它们包含在其他 CMakeLists.txt 文件中以加载该功能。你会在网上找到很多这些(例如,用于定位特定系统库的自定义 Find*.cmake 文件很常见。)一个常见的约定是在你的顶级源目录中有一个目录“CMake”,尽管其他配置也是可能的。
如果您有许多不同的构建目标,它们都有自己独特的源文件(例如,单个项目中有多个库),最好将它们分成子目录,每个子目录有一个 CMakeLists.txt 文件,顶级 CMakeLists.txt 文件。 txt 文件使用 add_subdirectory 将它们“挂钩”到主构建。
项目的“典型”结构可能如下所示:
project/
CMakeLists.txt
README
CMake/
FindSpecialtyLib1.cmake
FindSpecialtyLib2.cmake
CustomCMakeMacroA.cmake
etc...
include/
CMakeLists.txt (for installing headers, etc. if needed.)
src/
CMakeLists.txt (top level switching logic per user settings, etc.)
lib1/
CMakeLists.txt
src1.cxx
src2.cxx
lib2/
CMakeLists.txt
src1.cxx
src2.c
private_header.h
Run Code Online (Sandbox Code Playgroud)
当然,这只是一个假设的例子 - 您需要根据您的特定项目来塑造您的逻辑。由于您提到了 config.cmake 文件,因此可能值得一提的是,根据我的经验,大多数此类变量设置通常是在 cmake-gui 或 CMake 命令行中的 -D 定义中完成的。config.cmake 可以作为对选项进行分组的一种方式,但大多数用户在设置内容时可能会从 gui 开始。我还建议查看CMake 电子邮件档案中的特定问题 - 我发现它是一个非常有用的资源。
| 归档时间: |
|
| 查看次数: |
921 次 |
| 最近记录: |