【问题标题】:CMake generates project twiceCMake 两次生成项目
【发布时间】:2017-12-08 04:53:56
【问题描述】:

我正在按一些规则对文件夹中的源进行分组,并且我希望能够单独测试每个组以加快迭代速度。为此,我希望 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}")

root/build/ 运行cmake ../group_1 会生成我想要的项目root/build/group_1_tests/group_1_tests.sln,但也会生成root/build/Project.sln,其文件和设置与前一个相同。

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

【问题讨论】:

    标签: cmake


    【解决方案1】:

    答案在the project() command documentation

    项目的顶级CMakeLists.txt 文件必须包含对project() 命令的直接调用...如果不存在这样的调用,CMake 将隐式在顶部添加一个启用默认语言(@ 987654326@ 和 CXX)。

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

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

    参考文献

    【讨论】:

      猜你喜欢
      • 2011-01-05
      • 2015-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多