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

9

我正在使用 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

它会执行并给出期望的结果。

谁报告了错误?是CMake还是执行的进程?请提供您的CMake运行输出。 - Johannes S.
执行的进程 - theadnangondal
请提供CMake输出的相关部分(包括“MESSAGE”输出和错误消息) - Johannes S.
波浪号由您的shell扩展。它不是cmake的有效文件名。 - Peter
1个回答

13
问题在于您试图执行一个名为 "arm-none-eabi-gcc -E -P -x c-header ~/scatterFile.scatter rv" 的程序。请注意 execute_process() 的语法:
COMMAND <cmd1> [args1...]

为了使其更加明确,文档实际上可以这样写:
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)

"arm-none-eabi-gcc;-E;-P;-x;c-header;~/scatterFile.scatter" 这个命令完全没用,它会在引号中间放置分号而不是空格。 - theadnangondal
1
@theadnangondal 你是在哪里观察分号的呢?是在 message() 输出中还是在实际执行的命令行中?这两者是非常不同的。 - Angew is no longer proud of SO
message()输出,但命令行执行中也存在错误,包括文件未找到和“-x c-header在最后一个文件之后无效”。 - theadnangondal
1
@theadnangondal 嗯,奇怪。你能编辑问题,包括你设置 SCATTERFILE 的方式以及像我建议的参数打印脚本的输出吗?类似于这个Python - Angew is no longer proud of SO
我认为我可以从这里解决问题。打印参数脚本是一个很棒的想法。谢谢。 - theadnangondal
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接