You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置CMake在指定目录生成测试可执行文件?

解决CMake将测试可执行文件生成到指定目录的问题

问题出在你对add_executable的用法理解上——第一个参数是目标的名称,不是生成可执行文件的输出路径。CMake不会自动解析这个路径来创建输出目录,得通过专门的变量或属性来指定。

结合你的项目结构,这里有两种可靠的方法来实现把测试可执行文件放到project/build/tests目录:

方案一:全局设置测试目标的输出路径

如果你所有测试可执行文件都要放到同一个目录,可以在添加测试目标前,全局设置运行时文件的输出目录。这种方法适合批量处理测试目标:

cmake_minimum_required(VERSION 3.0)
project(ProjectName)

# 主程序配置(保持你原有的逻辑)
# ... 定义SRC_LIST、INCLUDE_LIST,链接依赖库等 ...
add_executable(${PROJECT_NAME} ${SRC_LIST} ${INCLUDE_LIST})

# 指定测试可执行文件的输出目录:build/tests
set(TEST_OUTPUT_DIR ${PROJECT_BINARY_DIR}/tests)
# 全局设置后续添加的所有可执行文件输出到该目录
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${TEST_OUTPUT_DIR})

# 添加测试目标(此时目标名只需写简单名称,不用带路径)
add_executable(OpenMP_Check tests/openmp.cpp)
# 若有其他测试,继续添加即可
add_executable(MemoryCheck tests/memory_check.cpp)

说明:${PROJECT_BINARY_DIR}就是你执行cmake命令的build目录,CMake会自动识别这个变量,无需硬编码路径。

方案二:针对单个测试目标设置输出路径(推荐)

如果需要更灵活的控制(比如部分测试文件放到不同目录,或者不想影响其他非测试可执行文件),可以用set_target_properties给每个测试目标单独配置输出路径:

cmake_minimum_required(VERSION 3.0)
project(ProjectName)

# 主程序配置(保持你原有的逻辑)
# ... 定义SRC_LIST、INCLUDE_LIST,链接依赖库等 ...
add_executable(${PROJECT_NAME} ${SRC_LIST} ${INCLUDE_LIST})

# 添加第一个测试目标
add_executable(OpenMP_Check tests/openmp.cpp)
# 设置该目标的输出目录为build/tests
set_target_properties(OpenMP_Check PROPERTIES
    RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/tests
)

# 添加第二个测试目标,同理配置
add_executable(ThreadSafetyCheck tests/thread_safety.cpp)
set_target_properties(ThreadSafetyCheck PROPERTIES
    RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/tests
)

可选:区分Debug/Release版本的输出目录

如果你的项目需要多配置构建(比如Debug和Release),可以给不同配置单独指定输出子目录,避免可执行文件混在一起:

set_target_properties(OpenMP_Check PROPERTIES
    RUNTIME_OUTPUT_DIRECTORY_DEBUG ${PROJECT_BINARY_DIR}/tests/Debug
    RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_BINARY_DIR}/tests/Release
)

这样Debug版本的测试程序会生成在build/tests/Debug,Release版本在build/tests/Release,结构更清晰。

总结

推荐使用方案二,因为它的灵活性更高,不会意外影响主程序或其他非测试目标的输出路径。配置完成后,你执行make(或ninja、VS构建)时,测试可执行文件就会自动生成到指定的build/tests目录下了。

内容的提问来源于stack exchange,提问作者Patafikss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:30:02