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

如何在CMake中一键运行多可执行文件并捕获输出到文本文件

解决方案:一键运行多目标并捕获输出

针对你的两个CMake需求,我来给你具体的实现方案,直接通过修改CMakeLists.txt就能搞定所有流程:

1. 完整修改后的CMakeLists.txt

先把你的配置调整好,同时实现一键运行和输出捕获的功能:

cmake_minimum_required(VERSION 3.18)
project(TestProject)
set(CMAKE_CXX_STANDARD 14)

# 保留原有的可执行目标(这里帮你修正了一个小错误:原SecondProgram误用了first.cpp)
add_executable(FirstProgram first.cpp)
add_executable(SecondProgram second.cpp)

# 自定义目标:一键运行所有程序并自动捕获输出
add_custom_target(RunAllPrograms
    # 确保先完成两个可执行文件的构建
    DEPENDS FirstProgram SecondProgram
    # 运行FirstProgram,将标准输出+错误写入对应文件
    COMMAND $<TARGET_FILE:FirstProgram> > first_program_output.txt 2>&1
    # 运行SecondProgram,同理捕获输出
    COMMAND $<TARGET_FILE:SecondProgram> > second_program_output.txt 2>&1
    # 指定工作目录为构建目录,保证输出文件生成在预期位置
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
    # 给目标加个描述,方便识别作用
    COMMENT "Running all programs and saving output to files..."
)

关键细节解释

  • 修复了你的配置错误:你原来的SecondProgram绑定的是first.cpp,这样两个程序输出完全一致,我已经改成了second.cpp。
  • $<TARGET_FILE:TargetName>:CMake的生成器表达式,会自动根据系统生成可执行文件的完整路径(比如Windows下带.exe后缀),完美适配跨平台场景。
  • 输出重定向:> output.txt把程序的标准输出写入文件,2>&1把标准错误也同步写入,确保所有输出都被捕获。
  • DEPENDS关键字:强制要求在运行自定义目标前,先完成两个可执行文件的构建,避免出现"找不到可执行文件"的问题。

2. 使用方法

常规使用(手动触发运行)

  1. 先完成构建配置:
    mkdir build && cd build
    cmake ..
    
  2. 执行自定义目标:
    # Linux/macOS
    make RunAllPrograms
    
    # Windows(使用MSBuild)
    cmake --build . --target RunAllPrograms
    

自动运行(构建时自动触发)

如果希望执行make或cmake --build .时自动运行所有程序,只需要给add_custom_target加上ALL关键字:

add_custom_target(RunAllPrograms ALL
    DEPENDS FirstProgram SecondProgram
    # 后续命令不变
)

3. 验证结果

执行完成后,你会在build目录下看到:

  • 生成的两个可执行文件:FirstProgram/FirstProgram.exe、SecondProgram/SecondProgram.exe
  • 两个输出文件:
    • first_program_output.txt:内容为Hello, World from the first program
    • second_program_output.txt:内容为Hello, World From the Second Program

这样就完全实现了你的两个需求:一键运行所有程序,同时自动把输出保存到对应文件里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:58:13