如何配置CMake&CTest:让make仅编译项目,make test编译并运行测试
解决方案
1. 修改tests/CMakeLists.txt
调整测试可执行文件的构建规则,将其排除在默认构建目标外,同时创建聚合目标统一管理测试编译:
# 创建自定义目标,用于触发所有测试用例的编译 add_custom_target(build_tests) foreach( APP ${TESTAPPS} ) # 给测试可执行文件添加EXCLUDE_FROM_ALL属性,避免默认make时编译 add_executable( "${APP}" EXCLUDE_FROM_ALL "${APP}.c" ${src_files}) # 将每个测试可执行文件关联到build_tests目标 add_dependencies(build_tests "${APP}") add_test( NAME "${APP}_test" COMMAND "${APP}" ) endforeach( APP ${TESTAPPS} )
2. 修改顶层CMakeLists.txt
让默认的test目标依赖build_tests,确保执行make test时先完成测试编译再运行测试:
# Build tests mark_as_advanced( BUILD_TESTS ) set( BUILD_TESTS true CACHE BOOL "Tests build target available if true" ) if( BUILD_TESTS ) enable_testing() add_subdirectory( tests ) # 关联test目标与build_tests,保证测试运行前先完成编译 add_dependencies(test build_tests) endif()
效果验证
- 执行
make:仅编译主项目代码,不会构建任何测试用例 - 执行
make test:先编译所有测试用例,然后自动运行所有测试 - 若仅需编译测试不运行,可执行
make build_tests
内容的提问来源于stack exchange,提问作者agustinvaca
相关产品推荐
相关产品推荐

