【问题标题】:Using cmake variable in execute_process command in cmake file在 cmake 文件的 execute_process 命令中使用 cmake 变量
【发布时间】:2015-01-20 11:51:47
【问题描述】:

我在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 变量在解析时没有按预期扩展。当我运行相同的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

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

【问题讨论】:

  • 谁报错? CMake还是执行的过程?请提供您的 CMake 运行的输出
  • 执行过程
  • 所以请提供CMake输出的相关部分(包括MESSAGE输出和错误信息)
  • 波浪号由你的 shell 扩展。这不是 cmake 的有效文件名。

标签: c gcc cmake cross-platform


【解决方案1】:

问题是您正在尝试执行名为“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)

【讨论】:

  • 在删除引号后,它会放置分号而不是空格 arm-none-eabi-gcc;-E;-P;-x;c-header;~/scatterFile.scatter 这完全没用
  • @theadnangondal 您在哪里观察分号?在message() 输出中,还是在实际执行的命令行中?这些是非常不同的东西。
  • message() 输出但命令行执行也有错误。包含 file not found-x c-header 在最后一个文件之后没有效果
  • 可能与您的FLAGS 内容有关,没有complete reproducing example 就很难说。您能否将arm-none-eabi-gcc 替换为测试脚本,以便您检查每个命令行参数的实际内容,以便验证您传入的内容?
  • @theadnangondal 嗯,很奇怪。您可以编辑问题以包括您设置SCATTERFILE 的方式,以及我建议的参数打印脚本的输出吗?类似this Python
猜你喜欢
  • 2016-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多