我正在尝试设置项目以使用CMake正确编译。

我的目录如下所示:

root
 |- bin
 |   |- // Where I want to build CMake from - using 'cmake ..'
 |- build
 |   |-
 |- include
 |   |- database
 |   |    |- database.h
 |- src
     |- database
     |    |- database.cpp
     |- main
          |- main.cpp

随着项目的扩大,我的子目录肯定会增长,并且认为CMake可能是一个好主意。目前,我只能让CMake在src/中没有子目录的情况下工作。但是,我确实希望该项目能够成长为许多子目录。

是否需要在每个目录中包含.cpp文件的多个 CMakeLists.txt ?谁能指出我正确的方向?

谢谢!

最佳答案

您的项目似乎不需要多个CMakeLists.txt。多次具有多个CMakeLists.txt的目的是多重的,但似乎不适合您的项目。例如,一种好处是分层组织,因此您可以将不同的单元分开以分别构建并最终链接。

示例

如果根目录中有另一个名为tests的目录,请考虑这种情况。该目录包含希望开发人员选择是否编译它的单元测试。在这种情况下,您将一个CMakeLists.txt放入tests,并使用 add_subdirectory(tests) 在主要的CMakeLists.txt中启用它,如下所示:

if(testing_enabled)
    add_subdirectory(tests)
endif()

tests中,将存在另一个CMakeLists.txt。这样,您就可以分离关注点。单元测试的开发独立于项目的开发,并且构建过程是独立的。

另一个示例

如果您有两个可供用户选择的库,请考虑这种情况。在这种情况下,您的root中有两个目录,lib1lib2。现在,您可以在主要的CMakeLists.txt中执行以下操作:
if(IWantLib1)
    add_subdirectory(lib1)
else()
    add_subdirectory(lib2)
endif()
lib1lib2目录都包含CMakeLists.txt。

10-07 13:17
查看更多