我创建了一个基于命令行可移植脚本的工业化不可知构建系统,可用于快速构建多个依赖项目,而不必依赖特定的 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 # 1. Build project only
cmake --build . --target # 2. Build tests
cmake --build . --target # 3. Run tests
如果我选择不运行测试,我可以直接从上面的阶段 1 进行安装,但是运行阶段 3 会触发之前的依赖阶段。
有什么线索吗? (如果没有,我怀疑我将不得不直接询问 CMake 开发人员......)
提前致谢。问候。
假设您为构建测试的可执行文件选择 build_tests
目标,为运行它们选择 run_tests
目标:
定义目标:
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)
创建测试的可执行文件,因此它们不会默认构建,而是使用 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)
Tôi là một lập trình viên xuất sắc, rất giỏi!