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

the*_*dal 6 c gcc cross-platform cmake

我正在使用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 )
Run Code Online (Sandbox Code Playgroud)

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

编辑:我已删除${FLAGS}

set ( EXECUTE_COMMAND "arm-none-eabi-gcc ${FLAGS}  -E -P -x c-header ${SCATTERFILE} -o ~/ttt.ld" )`
Run Code Online (Sandbox Code Playgroud)

现在我正在使用

set ( EXECUTE_COMMAND "arm-none-eabi-gcc   -E -P -x c-header ${SCATTERFILE} " )
Run Code Online (Sandbox Code Playgroud)

输出是:

EXECUTE_COMMAND arm-none-eabi-gcc   -E -P -x c-header ~/scatterFile.scatter rv: No such File or directory. 
Run Code Online (Sandbox Code Playgroud)

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

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

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

Rei*_*ica 9

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

COMMAND <cmd1> [args1...]
Run Code Online (Sandbox Code Playgroud)

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

COMMAND cmd1 [arg1 [arg1 ...]]
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)