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

如何查看CMake中add_custom_command执行时的控制台输出

CMake add_custom_command静默失败排查方案
  • 开启构建过程详细输出
    执行构建命令时添加 verbose 参数,即可打印所有执行的命令行和输出内容:
    • Makefile 构建器:执行 make VERBOSE=1
    • Ninja 构建器:执行 ninja -v
    • Visual Studio 构建器:执行 msbuild /verbosity:detailed
  • 为自定义命令添加调试逻辑
    可以修改add_custom_command配置,增加执行状态打印,确认命令展开结果和运行报错信息:
    add_custom_command(
          OUTPUT "${hw_proto_srcs}" "${hw_proto_hdrs}" "${hw_grpc_srcs}" "${hw_grpc_hdrs}"
          # 先打印展开后的完整命令,确认和手动执行的命令完全一致
          COMMAND echo "Running protoc command: ${CONAN_BIN_DIRS_PROTOBUF}/protoc --grpc_out=\"${CMAKE_CURRENT_BINARY_DIR}\" --cpp_out=\"${CMAKE_CURRENT_BINARY_DIR}\" --proto_path=\"${hw_proto_path}\" --plugin=protoc-gen-grpc=\"${CONAN_BIN_DIRS_GRPC}/grpc_cpp_plugin\" test.proto"
          # 捕获命令的所有输出到日志,失败时打印退出码
          COMMAND ${CONAN_BIN_DIRS_PROTOBUF}/protoc
            --grpc_out="${CMAKE_CURRENT_BINARY_DIR}"
            --cpp_out="${CMAKE_CURRENT_BINARY_DIR}"
            --proto_path="${hw_proto_path}"
            --plugin=protoc-gen-grpc="${CONAN_BIN_DIRS_GRPC}/grpc_cpp_plugin"
            test.proto 2>&1 > ${CMAKE_CURRENT_BINARY_DIR}/protoc_exec.log || echo "protoc failed with exit code $?"
          COMMENT "Generating protobuf/gRPC code from test.proto"
          )
    
  • 修复自定义命令触发逻辑
    你当前代码的核心问题是:add_custom_command生成的源文件没有被加入到目标的依赖链中,CMake不会主动执行这个自定义命令。需要把生成的源文件加到add_executable的源列表里:
    add_executable(test
      main.cpp
      ${hw_proto_srcs}
      ${hw_grpc_srcs}
    )
    
    或者显式声明目标依赖这些输出文件,即可触发自定义命令执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:54:04