gpt4 book ai didi

unit-testing - CMake:目标 "test"不构建测试,目标 "all"构建测试

转载 作者:行者123 更新时间:2023-11-28 20:36:28 32 4
gpt4 key购买 nike

我创建了一个基于命令行可移植脚本的工业化不可知构建系统,可用于快速构建多个依赖项目,而不必依赖特定的 IDE 或构建工厂。它是不可知的,因为它不是基于单个构建引擎。我使用 cmake 创建了第一个版本,因为我的项目主要是 C++,但它会发展(例如包括 gradle 或其他)。也就是说,我并不以 CMake 为中心,它只是一个实现目标的工具,易于移植的 C++ 项目构建。我以前想到了 BJam,如果有更多文档,我会保留它。

因此,我非常依赖 CMake 来执行构建和单元测试。截至今天,我意识到测试是在“所有”目标下构建的,并在“测试”目标下运行。

使用 CMake 2-(以及 - 这里例如 - 一个 Unix Makefiles 生成器):

make all  # Build project AND tests
make test # Run tests

使用 CMake 3+ 和任何生成器:

cmake --build . --target all  # Build project AND tests
cmake --build . --target test # Run tests

我想知道是否有人知道将“构建项目”阶段与“构建测试”阶段分开的方法(也是因为在我的构建系统中加入测试构建和运行测试感觉比反过来)。

重要的精确性:我不想用一种或另一种愿景来引导项目(通过翻转 BUILD_TESTING)。这个想法是有 3 个阶段,例如:

cmake --build . --target <project>     # 1. Build project only
cmake --build . --target <build_tests> # 2. Build tests
cmake --build . --target <run_tests> # 3. Run tests

如果我选择不运行测试,我可以直接从上面的阶段 1 进行安装,但是运行阶段 3 会触发之前的依赖阶段。

有什么线索吗? (如果没有,我怀疑我将不得不直接询问 CMake 开发人员......)

提前致谢。问候。

最佳答案

假设您为构建测试的可执行文件选择 build_tests 目标,为运行它们选择 run_tests 目标:

  1. 定义目标:

    add_custom_target(build_tests)
    # 'run_tests' triggers 'ctest'.
    add_custom_target(run_tests COMMAND ${CMAKE_CTEST_COMMAND})
    # 'run_tests' implies 'build_tests'
    add_dependencies(run_tests build_tests)
  2. 创建测试的可执行文件,因此它们不会默认构建,而是使用 build_tests 目标构建。

    # Do not build 'test1' by default
    add_executable(test1 EXCLUDE_FROM_ALL ...)
    # 'build_tests' implies (among other things) building 'test1'
    add_dependencies(build_tests test1)

关于unit-testing - CMake:目标 "test"不构建测试,目标 "all"构建测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52524480/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com