【问题标题】:Which file organization for CMake? Should CMakeLists.txt include other files?CMake 的文件组织是什么? CMakeLists.txt 是否应该包含其他文件?
【发布时间】:2015-04-04 10:30:34
【问题描述】:

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

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

对于 CMake,什么是好的文件组织? CMakeLists.txt 文件应该分成子文件吗?

非常感谢您的帮助!

【问题讨论】:

    标签: cmake


    【解决方案1】:

    一个好的文件组织取决于你的 CMake 逻辑有多大,或者你期望它有多大。一般来说:

    1. 可能会被大量重复使用的功能,您可能希望将其组织成包含宏的“每个主题”.cmake 文件,并将它们包含在您的其他 CMakeLists.txt 文件中以加载该功能。你会在网上找到很多这样的东西(例如,用于定位特定系统库的自定义 Find*.cmake 文件很常见。)一个常见的约定是在你的顶级源目录中有一个目录“CMake”,尽管其他配置也是可能的。

    2. 1234563 ,使用 add_subdirectory 将顶级 CMakeLists.txt 文件“挂钩”到主构建。

    项目的“典型”结构可能如下所示:

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

    【讨论】:

      猜你喜欢
      • 2013-08-01
      • 2013-03-18
      • 2018-08-13
      • 2021-06-19
      • 2021-08-29
      • 1970-01-01
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多