编译Cmake子项目而不编译其他子项目

时间:2018-02-08 10:49:04

标签: cmake clion multiple-projects

我有一个大型项目,我将其分为“模块”或“子项目”。目录结构看起来像这样(简化,但基本的想法):

project-root/

    CMakeLists.txt <-- Contains some variable definitions

    module1/
        CMakeLists.txt <-- Receives variable definitions from top-level
        src/

    module2/
        CMakeLists.txt <-- Receives variable definitions from top-level
        src/

根CMakeLists.txt没有定义任何库或可执行文件。它使用add_subdirectory(module1)add_subdirectory(module2)来引用具有库和可执行文件的低级模块。

现在,这一切都很好。我正在使用CLion,它能够构建整个项目。我的问题是当开发人员想要编译只有一个模块时,而不必处理其他模块。

我在根级CMakeLists.txt中创建了变量,这些变量由模块的CMakeLists.txt文件使用。但是如果我只尝试编译其中一个模块,那么变量当然是未定义的(或空白)。有没有一种处理这类问题的标准方法?我希望能够独立编译每个模块,但我不想重新定义每个CMakeLists.txt文件中的变量。

1 个答案:

答案 0 :(得分:0)

我相信这正是人们在添加&#34; BUILD_TESTS&#34;选项。

例如,请查看grpc

如果您按照here选项进行操作,您会看到如果定义了该选项,那么他们会添加一个库(它们也可以执行大量其他操作)。

总结一下:

  1. 创建一个选项:option(BUILD_MODULE_1 "Build module 1" ON)
  2. add_subdirectory(module1)
  3. 致电if(BUILD_MODULE_1)

    在CLion中,您可以编辑缓存并重新加载CMake,也可以将选项(例如-DBUILD_MODULE_1=OFF)添加到&#34; CMake选项&#34;在设置中。