2013-01-12 239 views
0

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

那么如何使用cmake做到这一点?

Cmake有add_custom_command,但它什么都不做,所以我们不能使用它。 execute_process更好,因为它运行的东西,但方式不对。

execute_process(COMMAND "protoc -I=\".\" --cpp_out=\".\" protocol.proto" 
       WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) 

不幸的是,结果却是一无所获,因为CMake的不能正常运行的命令,所以“protoc”打印“没有这样的文件或目录”。

添加/编辑:这execute_process调用位于的CMakeLists.txt它位于同一目录中protocol.proto文件

为什么它不能只是简单的运行这个命令?

回答

3

你不应该需要包裹COMMAND论点语录:

execute_process(COMMAND protoc -I=. --cpp_out=. protocol.proto 
       WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})