Cmake无法运行shell命令

Ale*_*ran 0 cmake protocol-buffers

假设我们有一个包含一些子目录的项目,并且需要在其子目录之一中生成 .cpp 和 .h 文件。事实是:如果我们在该目录中运行命令(不带 < 和 >),它会生成有效文件。

那么如何使用 cmake 来做同样的事情呢?

Cmake有add_custom_command,但它什么也不做,所以我们不能使用它。execute_process 更好,因为它运行一些东西,但是以错误的方式运行。

execute_process(COMMAND "protoc -I=\".\" --cpp_out=\".\" protocol.proto"
                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
Run Code Online (Sandbox Code Playgroud)

不幸的是,结果什么也没有,因为 cmake 无法正确运行命令,因此“protoc”打印“No such file or directory”。

添加/编辑:此execute_process调用位于CMakeLists.txt中,该txt与protocol.proto文件位于同一目录中

为什么它不能简单地运行这个命令?

Fra*_*ser 5

您不需要将COMMAND参数括在引号中:

execute_process(COMMAND protoc -I=. --cpp_out=. protocol.proto
                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
Run Code Online (Sandbox Code Playgroud)