Запустите команду, которая изменяет среду cmake.

Можно ли выполнить процесс внутри 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() в этой новой среде?


person Barry    schedule 20.12.2017    source источник


Ответы (1)


Да, вы можете изменить переменные среды с помощью set($env{..} ..). Но часто лучше передать правильные аргументы в вызов инструмента.

Для вашего примера pkg-config оба способа описаны в ответах на этот вопрос: Добавить временный путь к pkg-config в скрипте CMake?
Краткая выдержка; используйте что-то вдоль этого:

set(PKG_CONFIG_PATH "${PKG_CONFIG_PATH}:${MYLIB_ROOT}/lib/pkgconfig")
Pkg_search_module(PKG_MYLIB mylib)
person usr1234567    schedule 21.12.2017
comment
@Barry: ты не против принять этот ответ? Или не правильно ответили? - person usr1234567; 29.12.2017