CMake的文件组织是什么? CMakeLists.txt应该包含其他文件吗?

时间:2015-04-03 13:48:04

标签: cmake

我使用CMake配置,构建和安装C ++代码。 我已经定义了一些用户选项。 我添加了一个选项让CMake下载外部依赖项。 等等。

目前,关于CMake的所有内容都写在一个文件CMakeLists.txt中。还有一个配置文件' config.cmake'它允许用户定义各种参数,如详细级别,库路径,编译器标志等。

CMake有什么好的文件组织? CMakeLists.txt文件应该分为子文件吗?

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:4)

良好的文件组织取决于您的CMake逻辑有多大,或者您希望它变得多大。一般来说:

  1. 可能会被重复使用的功能很可能会被组织成"每个主题" .cmake包含宏的文件,并将它们包含在其他CMakeLists.txt文件中以加载该功能。您可以在Web上找到很多这些内容(例如,用于查找特定系统库的自定义Find * .cmake文件非常常见。)常见的惯例是拥有一个目录" CMake&#34 ;在您的顶级源目录中,尽管可以进行其他配置。

  2. 如果你有很多不同的构建目标和它们自己独特的源文件(例如,在一个项目中有多个库),那么最好将它们分成子目录并在每个子目录中有一个CMakeLists.txt文件,使用顶级CMakeLists.txt文件,使用add_subdirectory来"将它们挂钩在"到主要建筑。

  3. 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以了解具体问题 - 我发现这是一个非常有用的资源。