是否可以在cmake中执行影响cmake自身环境的进程?
例如,我有一个更新PKG_CONFIG_PATH
的脚本,需要运行该脚本,以便pkg-config
随后可以很好地找到我的包。如果我只写:
find_package(PkgConfig REQUIRED)
pkg_check_modules(FOO REQUIRED foo)
这将失败
-- Checking for module 'foo'
-- No package 'foo' found
我需要先运行:
find_package(PkgConfig REQUIRED)
execute_process(COMMAND my_path_updating_script)
pkg_check_modules(FOO REQUIRED foo)
但是在cmake之外,这有效(pkg-config
随后发现foo
),在cmake中,这会运行该进程并且pkg-config
继续失败。有没有办法实际更新本地cmake环境以反映该脚本中的更改?或者,只是在新环境中运行pkg_check_modules()
?
答案 0 :(得分:0)
是的,您可以使用set($env{..} ..)
更改环境变量。但通常最好将正确的参数传递给工具调用。
对于您的pkg-config示例,此问题的答案中描述了两种方式:Add temporarily path to pkg-config within CMake script?
简短摘录;使用这个:
set(PKG_CONFIG_PATH "${PKG_CONFIG_PATH}:${MYLIB_ROOT}/lib/pkgconfig")
Pkg_search_module(PKG_MYLIB mylib)