Как передать переменную среды в ExternalProject_Add CONFIGURE_COMMAND?

У меня есть сторонняя библиотека с проектом autotools. Я хочу использовать ExternalProject_Add для создания библиотеки.

Это можно сделать следующим образом:

ExternalProject_Add(project_lib
   SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib
   CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/lib/configure --prefix=${LIB_OUTPUT}
   BINARY_DIR ${CMAKE_CURRENT_SOURCE_DIR}/build
)

Теперь проблема в том, что мне нужно передать переменную среды в configure, но я не могу найти способ сделать это.

В консоли я бы сделал так:

CPPFLAGS = "-fPIC" ./configure --prefix=output

Есть ли способ передать CPPFLAGS = "-fPIC" env в configure с помощью ExternalProject_Add/CONFIGURE_COMMAND?

Вы пытались указать команду так же, как ExternalProject_Add(), как вы это делаете в командной строке, в переменной среды и во всем остальном? Если CMake порождает оболочку для обработки команды, она должна работать точно так же (в отличие от прямого запуска команды). В документации неясно, какой подход использует CMake.

John Bollinger 16.04.2019 15:30

Конечно, если CMake автоматически не использует оболочку для запуска команды, вы можете сделать это явно, сделав команду похожей на /bin/sh -c 'CPPFLAGS = "-fPIC" ./configure --prefix=output'. Это несколько зависит от платформы, но configure в любом случае не будет работать без версии оболочки Bourne.

John Bollinger 16.04.2019 15:52

Вы нашли способ? у меня такая же проблема

JonasVautherin 16.06.2020 01:49

@JonasVautherin Да, я сделал, но совершенно забыл упомянуть об этом. Я должен найти его в своем коде.

Alexandre A. 17.06.2020 21:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
4
2 392
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это можно сделать, выполнив команду configure через cmake (cmake --help) командный режим:

-E                           = CMake command mode.

Поэтому вместо прямого вызова configure мы можем выполнить его через командный режим cmake с переменными среды:

ExternalProject_Add(project_lib
   SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib
   CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env CPPFLAGS=-fPIC ${CMAKE_CURRENT_SOURCE_DIR}/lib/configure --prefix=${LIB_OUTPUT}
   BINARY_DIR ${CMAKE_CURRENT_SOURCE_DIR}/build
)

[cmake-developers] Настройка среды с помощью ExternalProject_Add

Я попробую это сегодня вечером, но это было бы потрясающе!

JonasVautherin 17.06.2020 22:39

@ Александр А. Я не могу понять, как заставить это работать в моем проекте, который должен экспортировать переменную среды ANDROID_NDK_rb16=path/to/ndk. Что мне нужно добавить в следующем, чтобы установить эту переменную? ExternalProject_Add(project_sqlite URL urlToSqlite.zip PREFIX ${CMAKE_CURRENT_BINARY_DIR}/sqlite-${sqlite_VERSION} CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_DEBUG_POSTFIX=${CMAKE_DEBUG_POSTFIX} -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> )

SteveTJS 28.07.2020 20:09

@SteveTJS Я не уверен, что понимаю. Вы можете получить env vars с помощью $ENV{ENV_NAME}

Alexandre A. 30.07.2020 21:36

@SteveTJS Я ожидаю, что это сработает, если вы последуете этому ответу. Одна вещь с проектами Android заключается в том, что этот ответ, вероятно, не будет работать для хостов Windows. Интересно, можно ли работать с обеими платформами..

Kikaxa 09.03.2021 21:33

Другие вопросы по теме