【问题标题】:Run a command that changes cmake's environment运行一个改变cmake环境的命令
【发布时间】:2017-12-20 23:46:24
【问题描述】:

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

【问题讨论】:

    标签: cmake pkg-config


    【解决方案1】:

    是的,您可以使用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)
    

    【讨论】:

    • @Barry:你介意接受这个答案吗?还是没有正确回答?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 2021-12-25
    相关资源
    最近更新 更多