CMake两次生成项目

时间:2017-12-07 12:13:04

标签: cmake

我正在按照一些规则对文件夹中的源进行分组,我希望能够单独测试每个组以便更快地进行迭代。为此,我想要CMake为每个组生成一个可执行文件。我将项目结构简化为:

root
    build
    group_1
        CMakeLists.txt
        group_1_file_1.cpp
        group_1_tests
            CMakeLists.txt
            group_1_file_1_tests.cpp

其中group_1/CMakeLists.txt是:

SET(group_1_srcs
    ${CMAKE_CURRENT_SOURCE_DIR}/group_1_file_1.cpp
)

#Generate standalone application for unit tests when cmake is started with this CMakeLists as root
IF(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
    ADD_SUBDIRECTORY("group_1_tests/")
ENDIF()

group_1/group_1_tests/CMakeLists.txt

PROJECT(group_1_tests)
SET(group_1_tests_srcs
    ${CMAKE_CURRENT_SOURCE_DIR}/group_1_file_1_tests.cpp
)
ADD_EXECUTABLE(${PROJECT_NAME} "${group_1_tests_srcs}" "${group_1_srcs}")

cmake ../group_1运行root/build/会生成我想要的项目,root/build/group_1_tests/group_1_tests.sln,还会生成root/build/Project.sln相同的文件&设置为上一个。

您能否解释一下为什么要生成这些项目以及如何避免它?

1 个答案:

答案 0 :(得分:0)

答案在the project() command documentation

  

项目的顶级CMakeLists.txt文件必须包含对project()命令的文字直接调用...如果不存在此类调用,则CMake将隐式地将一个添加到顶部,以启用默认语言(CCXX)。

所以Project是默认项目的名称。从那时起,CMake为包含另一个.sln命令的所有CMakeLists.txt生成project()解决方案。

我建议您忽略根解决方案文件(如果您不想要它)或重构您的项目以在根project()中进行单个CMakeList.txt命令调用(因为您的子级别)如果没有顶级项目,项目将不会独立运行。

<强>参考