在cmake文件中的execute_process命令中使用cmake变量

时间:2015-01-20 11:51:47

标签: c gcc cmake cross-platform

我在execute_process()中使用cmake功能。

message(" FLAGS = ${FLAGS}")
message(" SCATTERFILE = ${SCATTERFILE}")
set ( EXECUTE_COMMAND "arm-none-eabi-gcc ${FLAGS}  -E -P -x c-header ${SCATTERFILE} -o ~/ttt.ld" )
message("EXECUTE_COMMAND = ${EXECUTE_COMMAND}")
execute_process(COMMAND  ${EXECUTE_COMMAND} RESULT_VARIABLE rv )

message()命令导致所有内容都完美显示,但在解析cmake时运行时会导致错误。我认为FLAGS变量在解析时没有按预期扩展。当我运行在终端中作为EXECUTE_COMMAND命令的结果显示的相同message时,它运行得很好。可能是什么问题?

编辑: 我已从

中删除了${FLAGS}
set ( EXECUTE_COMMAND "arm-none-eabi-gcc ${FLAGS}  -E -P -x c-header ${SCATTERFILE} -o ~/ttt.ld" )`

现在我正在使用

set ( EXECUTE_COMMAND "arm-none-eabi-gcc   -E -P -x c-header ${SCATTERFILE} " )

输出结果为:

EXECUTE_COMMAND arm-none-eabi-gcc   -E -P -x c-header ~/scatterFile.scatter rv: No such File or directory. 

如果我只是在终端上输入此命令,

  

arm-none-eabi-gcc -E -P -x c-header~ / scatterFile.scatter

它执行并给出预期的结果。

1 个答案:

答案 0 :(得分:9)

问题是您正在尝试执行名为" arm-none-eabi-gcc -E -P -x c-header ~/scatterFile.scatter rv"的程序。请注意execute_process()的语法:

COMMAND <cmd1> [args1...]

为了使它更清晰,documentatin实际上可以写成:

COMMAND cmd1 [arg1 [arg1 ...]]

CMake希望将命令名称作为一个CMake参数,将每个命令行参数作为另一个单独的CMake参数。但是,您将所有内容括在引号中,然后将其转换为一个 CMake参数(包含大量空格)。按如下方式更改您的代码:

set (EXECUTE_COMMAND arm-none-eabi-gcc ${FLAGS} -E -P -x c-header ${SCATTERFILE} -o ~/ttt.ld)

execute_process(COMMAND ${EXECUTE_COMMAND} RESULT_VARIABLE rv)