我使用CMake配置,构建和安装C ++代码。 我已经定义了一些用户选项。 我添加了一个选项让CMake下载外部依赖项。 等等。
目前,关于CMake的所有内容都写在一个文件CMakeLists.txt中。还有一个配置文件' config.cmake'它允许用户定义各种参数,如详细级别,库路径,编译器标志等。
CMake有什么好的文件组织? CMakeLists.txt文件应该分为子文件吗?
非常感谢你的帮助!
答案 0 :(得分:4)
良好的文件组织取决于您的CMake逻辑有多大,或者您希望它变得多大。一般来说:
可能会被重复使用的功能很可能会被组织成"每个主题" .cmake包含宏的文件,并将它们包含在其他CMakeLists.txt文件中以加载该功能。您可以在Web上找到很多这些内容(例如,用于查找特定系统库的自定义Find * .cmake文件非常常见。)常见的惯例是拥有一个目录" CMake&#34 ;在您的顶级源目录中,尽管可以进行其他配置。
如果你有很多不同的构建目标和它们自己独特的源文件(例如,在一个项目中有多个库),那么最好将它们分成子目录并在每个子目录中有一个CMakeLists.txt文件,使用顶级CMakeLists.txt文件,使用add_subdirectory来"将它们挂钩在"到主要建筑。
A"典型"项目的结构可能如下所示:
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
这只是一个假设的例子,当然 - 你想要根据你的具体项目塑造你的逻辑。既然你提到了一个config.cmake文件,那么可能值得一提的是,根据我的经验,这种类型的大多数变量设置通常在cmake-gui或者来自CMake命令行的-D定义中完成。 config.cmake作为一种分组选项的方式,但大多数用户可能会在设置时开始使用gui。我还建议您查看CMake email archives以了解具体问题 - 我发现这是一个非常有用的资源。