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

Sas*_*sha 71 cmake

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

Fra*_*ser 72

你想要这个execute_process命令.

在您的情况下,在Windows上:

execute_process(COMMAND CMD /c echo bar OUTPUT_VARIABLE FOO)
Run Code Online (Sandbox Code Playgroud)

或者在Linux上,简单地说:

execute_process(COMMAND echo bar OUTPUT_VARIABLE FOO)
Run Code Online (Sandbox Code Playgroud)


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

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

execute_process(COMMAND ${CMAKE_COMMAND} -E echo bar OUTPUT_VARIABLE FOO)
Run Code Online (Sandbox Code Playgroud)

  • 根据您执行的命令,它可能会为变量设置尾随空格.如果不希望出现这种情况,可以使用选项OUTPUT_STRIP_TRAILING_WHITESPACE作为'execute_process'函数的最后一个参数. (10认同)
  • @hbobenicio`OUTPUT_STRIP_TRAILING_WHITESPACE`或多或少是**必需** IMO (2认同)
  • 如果您的命令不仅仅是一个简单的程序调用,请使用`COMMAND bash“ -c”“ your_complex.sh | command && stuff”`。信用:/sf/answers/2498674531/ (2认同)