【发布时间】:2021-06-03 11:45:16
【问题描述】:
我在mytestprogram.cmake 中有一个参数化函数,如下所示:
function(get_output_from_input output input)
set(${output} "test" PARENT_SCOPE)
endfunction()
问题:
如何在 shell 脚本中调用 cmake 方法get_output_from_input?
我了解到有 -P <source.cmake> 标志,它将 CMake 置于脚本处理模式,我们可以使用它执行任意 CMake 代码,如下所示。
execute_process(COMMAND ${CMAKE_PROGRAM} -P yourscript.cmake)
那么,在这种情况下,我相信从 shell 脚本调用 get_output_from_input 的方式如下所示?
input="some_input"
output=""
execute_process(get_output_from_input(output, input) ${CMAKE_PROGRAM} -P mytestprogram.cmake)
echo $output
但上述技巧不起作用。我运行execute_process 的方式正确吗?
试图找出问题所在,echo $CMAKE_PROGRAM 似乎返回空?这可能是原因吗?我在这里缺少什么打电话给get_output_from_input?
环境:
cmake 版本 3.18.2
macOS 卡塔利娜
【问题讨论】:
-
我更正了
get_output_from_input的语法。 -
显然,如果没有适当的解释器,您将无法运行脚本或其中的一部分。没有 shell 就不能运行 shell 脚本(
sh、bash等),没有cmake就不能运行 CMake 脚本。此外,脚本中的所有定义(函数、变量)仅对其解释器可见:您无法在 CMake 之外读取在 CMake 脚本中定义的变量,您无法在 CMake 之外运行在 CMake 脚本中定义的函数。唯一的例外是环境变量,因为它们根本不是脚本变量:环境变量的概念是跨脚本语言共享的。 -
这很好地解释了我的问题。感谢您解释为什么@Tsyvarev
标签: shell cmake cmake-language cmakelists-options