如何使用shell命令的结果初始化CMake变量


78

有没有办法在CMake脚本中将变量设置为shell命令的输出?我SET(FOO COMMAND "echo bar")会想到类似的东西

Answers:


81

您需要execute_process命令。

就您而言,在Windows上:

execute_process(COMMAND CMD /c echo bar OUTPUT_VARIABLE FOO)

或在Linux上,只需:

execute_process(COMMAND echo bar OUTPUT_VARIABLE FOO)


在这种特殊情况下,CMake提供了跨平台的解决方案。CMake本身可用于运行可在所有系统上使用的命令,其中之一是echo。为此,应将命令行arg传递给CMake -E。有关此类命令的完整列表,请运行cmake -E help

在CMake脚本中,CMake可执行文件由引用${CMAKE_COMMAND},因此该脚本需要执行以下操作:

execute_process(COMMAND ${CMAKE_COMMAND} -E echo bar OUTPUT_VARIABLE FOO)

12
根据您执行的命令,它可能会将尾随空格设置为变量。如果不希望出现这种情况,则可以使用选项OUTPUT_STRIP_TRAILING_WHITESPACE作为'execute_process'函数的最后一个参数。
hbobenicio

3
OUTPUT_STRIP_TRAILING_WHITESPACE或多或少需要@hbobenicio IMO
Trevor Boyd Smith,

3
如果您的命令不仅仅是简单的程序调用,请使用COMMAND bash "-c" "your_complex.sh | command && stuff"。信用:stackoverflow.com/a/35695350/5470596
YSC
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.