У меня есть сторонняя библиотека с проектом 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?
Конечно, если CMake автоматически не использует оболочку для запуска команды, вы можете сделать это явно, сделав команду похожей на /bin/sh -c 'CPPFLAGS = "-fPIC" ./configure --prefix=output'. Это несколько зависит от платформы, но configure в любом случае не будет работать без версии оболочки Bourne.
Вы нашли способ? у меня такая же проблема
@JonasVautherin Да, я сделал, но совершенно забыл упомянуть об этом. Я должен найти его в своем коде.





Это можно сделать, выполнив команду 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
Я попробую это сегодня вечером, но это было бы потрясающе!
@ Александр А. Я не могу понять, как заставить это работать в моем проекте, который должен экспортировать переменную среды 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 Я не уверен, что понимаю. Вы можете получить env vars с помощью $ENV{ENV_NAME}
@SteveTJS Я ожидаю, что это сработает, если вы последуете этому ответу. Одна вещь с проектами Android заключается в том, что этот ответ, вероятно, не будет работать для хостов Windows. Интересно, можно ли работать с обеими платформами..
Вы пытались указать команду так же, как
ExternalProject_Add(), как вы это делаете в командной строке, в переменной среды и во всем остальном? Если CMake порождает оболочку для обработки команды, она должна работать точно так же (в отличие от прямого запуска команды). В документации неясно, какой подход использует CMake.