CMake的哪个文件组织?CMakeLists.txt是否应包含其他文件?

CMake的哪个文件组织?CMakeLists.txt是否应包含其他文件?,cmake,Cmake,我使用CMASE来配置、构建和安装C++代码。 我已经定义了一些用户选项。 我添加了一个选项,让CMake下载外部依赖项。 等等等等 目前,关于CMake的所有内容都写在一个文件CMakeLists.txt中。还有一个配置文件'config.cmake',允许用户定义各种参数,如详细级别、库路径、编译器标志等 什么是CMake的好文件组织? 是否应将CMakeLists.txt文件划分为子文件 非常感谢你的帮助 一个好的文件组织取决于您的CMake逻辑有多大,或者您希望它有多大。一般来说: 可能

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

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

什么是CMake的好文件组织? 是否应将CMakeLists.txt文件划分为子文件


非常感谢你的帮助

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

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

  • 如果您有许多不同的构建目标,它们有自己独特的源文件(例如,单个项目中有多个库),那么最好将它们划分为子目录,每个子目录有一个CMakeLists.txt文件,顶级的CMakeLists.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
    

    当然,这只是一个假设的例子——你需要根据你的具体项目来塑造你的逻辑。由于您提到了config.cmake文件,根据我的经验,这种类型的大多数变量设置通常在cmake gui中完成,或者在cmake命令行中从-D定义完成。config.cmake是一种对选项进行分组的方法,但大多数用户可能会从gui开始进行设置。我还建议查看以了解具体问题-我发现它是一个非常有用的资源。

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

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

  • 如果您有许多不同的构建目标,它们有自己独特的源文件(例如,单个项目中有多个库),那么最好将它们划分为子目录,每个子目录有一个CMakeLists.txt文件,顶级的CMakeLists.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
    
    当然,这只是一个假设的例子——你需要根据你的具体项目来塑造你的逻辑。由于您提到了config.cmake文件,根据我的经验,这种类型的大多数变量设置通常在cmake gui中完成,或者在cmake命令行中从-D定义完成。config.cmake是一种对选项进行分组的方法,但大多数用户可能会从gui开始进行设置。我还建议你检查一下具体的问题——我发现这是一个非常有用的资源