如何查看CMake中add_custom_command执行时的控制台输出
CMake add_custom_command静默失败排查方案
- 开启构建过程详细输出
执行构建命令时添加 verbose 参数,即可打印所有执行的命令行和输出内容:- Makefile 构建器:执行
make VERBOSE=1 - Ninja 构建器:执行
ninja -v - Visual Studio 构建器:执行
msbuild /verbosity:detailed
- Makefile 构建器:执行
- 为自定义命令添加调试逻辑
可以修改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
相关产品推荐
相关产品推荐

