CMake 创建了很多我没有指定的目标

标签 cmake

我仍在学习 CMake,并在一个带有库和测试的小项目中使用它(使用 Catch2)。我的设置是 Windows 10、带有 MinGW 的 GCC 6.3.0、CMake 3.13.3 和带有 CMakeTools 插件的 VSCode。项目结构:

.
+- build
+- doc
+- src
|  +- CMakeLists.txt
|  +- /* .hpp and .cpp sources */
+- test
|  +- CMakeLists.txt
|  +- unit_tests.cpp
+- CMakeLists.txt

现在,问题是,虽然一切正常,但我得到了大量的目标,除了 srctest 目标:

ContinuousBuild.dir/
ContinuousTest.dir/
ExperimentalMemCheck.dir/
NightlyMemoryCheck.dir/
ContinuousConfigure.dir/
ContinuousUpdate.dir/
ExperimentalStart.dir/
Nightly.dir/
NightlyStart.dir/
ContinuousCoverage.dir/
Experimental.dir/
ExperimentalSubmit.dir/
NightlyBuild.dir/
NightlySubmit.dir/
ContinuousMemCheck.dir/
ExperimentalBuild.dir/
ExperimentalTest.dir/
NightlyConfigure.dir/
NightlyTest.dir/
ContinuousStart.dir/
ExperimentalConfigure.dir/
ExperimentalUpdate.dir/
NightlyCoverage.dir/
NightlyUpdate.dir/
Continuous.dir/
ContinuousSubmit.dir/
ExperimentalCoverage.dir/
NightlyMemCheck.dir/

它们位于 build/CMakeFiles/。我不知道如何摆脱它们? 这是我的 3 个 CMakeList.txt 文件的转储:

####################################
# root
####################################

cmake_minimum_required(VERSION 3.5.0)

project(TestProject CXX)

set( CMAKE_CXX_STANDARD 17 )
set( CMAKE_CXX_STANDARD_REQUIRED ON )
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} )

find_package(Catch2 REQUIRED)
include(Catch)
include(CTest)

add_subdirectory(test)
add_subdirectory(src)

enable_testing()

add_test( ${PROJECT_NAME}_test_all
    unit_tests
)
####################################
# ./source
####################################

add_library( my_lib
    A.hpp
    A.cpp
    B.hpp
    B.cpp
)

####################################
# ./test
####################################

add_executable(
    unit_tests
    unit_tests.cpp
)

target_include_directories( unit_tests
    PRIVATE ../src/
)

target_link_libraries( unit_tests
    my_lib
    Catch2::Catch2
)

作为一个附带问题,我必须使用 set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} ) 否则 unit_tests.exe 文件被放入 build\test 和 CMake找不到它来运行测试;有没有更好的办法?

最佳答案

在调用 enable_testing() 之前,您可以通过在 CMake 代码中的任何位置执行 set_property(GLOBAL PROPERTY CTEST_TARGETS_ADDED 1) 来阻止创建这些对象。

添加这些的代码位于 CTestTargets.cmake

关于CMake 创建了很多我没有指定的目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56089330/

相关文章:

visual-studio - 使用 cmake 生成可再发行的 Visual Studio 项目

linux - cmake 在 Linux 上复制 Fortran 模块失败

cmake - 如何在 CPACK 和 NSIS 中为文本文件添加开始菜单条目

linux - 尽管使用了正确的工具链文件,但为什么 CMake 在交叉编译 Net-SNMP 代理时明显引用主机系统文件?

c++ - 为 Code::Blocks 安装 FLTK

android - 调用callback()到Java时应用崩溃。由于detatchThread而导致运行时错误

c++ - 为什么 CMake 找不到 GTest(Google 测试)?

c++ - Windows 10 上带有 mingw 的 CMake : Detecting CXX compiler ABI info - failed

cmake - PROTOBUF_GENERATE_CPP 不生成 src 和头文件

c++ - 如何让 Netbeans 从项目中删除已删除的文件?