运行一个更改cmake环境的命令

时间:2017-12-20 23:46:24

标签: cmake pkg-config

是否可以在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()

1 个答案:

答案 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)