在 cmake 文件的 execute_process 命令中使用 cmake 变量
Using cmake variable in execute_process command in cmake file
我正在 cmake
中使用 execute_process()
函数。
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
变量在解析时没有按预期扩展。当我 运行 与终端中 message
命令显示的相同 EXECUTE_COMMAND
时,它 运行 完美无缺。可能是什么问题?
编辑:
我从
中删除了 ${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
它执行并给出了预期的结果。
问题是您正在尝试执行名为“arm-none-eabi-gcc -E -P -x c-header ~/scatterFile.scatter rv
”的程序。注意 execute_process()
:
的语法
COMMAND <cmd1> [args1...]
为了更清楚,文档实际上可以这样写:
COMMAND cmd1 [arg1 [arg1 ...]]
CMake 期望命令名称作为一个 CMake 参数,每个命令行参数作为另一个单独的 CMake 参数。但是,您将所有内容括在引号中,这会将其变成 one 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)
我正在 cmake
中使用 execute_process()
函数。
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
变量在解析时没有按预期扩展。当我 运行 与终端中 message
命令显示的相同 EXECUTE_COMMAND
时,它 运行 完美无缺。可能是什么问题?
编辑: 我从
中删除了${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
它执行并给出了预期的结果。
问题是您正在尝试执行名为“arm-none-eabi-gcc -E -P -x c-header ~/scatterFile.scatter rv
”的程序。注意 execute_process()
:
COMMAND <cmd1> [args1...]
为了更清楚,文档实际上可以这样写:
COMMAND cmd1 [arg1 [arg1 ...]]
CMake 期望命令名称作为一个 CMake 参数,每个命令行参数作为另一个单独的 CMake 参数。但是,您将所有内容括在引号中,这会将其变成 one 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)