【问题标题】:How to pass an environment variable to ExternalProject_Add CONFIGURE_COMMAND?如何将环境变量传递给 ExternalProject_Add CONFIGURE_COMMAND?
【发布时间】:2019-09-06 13:56:52
【问题描述】:

我有一个带有 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

有没有办法通过ExternalProject_Add/CONFIGURE_COMMANDCPPFLAGS="-fPIC" env 传递给configure

【问题讨论】:

  • 您是否尝试过以与在命令行、环境变量等上相同的方式指定命令到ExternalProject_Add()?如果 CMake 生成一个 shell 来处理命令,那么它应该可以正常工作(而不是直接启动命令)。文档不清楚 CMake 使用哪种方法。
  • 当然,如果CMake 不自动使用shell 来运行命令,那么您可以通过使命令类似于/bin/sh -c 'CPPFLAGS="-fPIC" ./configure --prefix=output' 来明确地这样做。这在某种程度上是特定于平台的,但无论如何,如果没有 Bourne shell 版本,configure 将无法工作。
  • 你找到方法了吗?我也有同样的问题
  • @JonasVautherin 是的,我做到了,但完全忘记提及了。我必须在我的代码中找到它。

标签: cmake build-process build-automation autotools


【解决方案1】:

可以通过cmake执行configure命令来完成(cmake --help)command mode:

-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] Setting up environment using ExternalProject_Add

【讨论】:

  • 今晚我会试一试,但那太棒了!
  • @Alexandre A. 我无法弄清楚如何让它在我需要导出环境变量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{ENV_NAME} 获取环境变量
  • @SteveTJS 如果遵循这个答案,我希望它能够工作。 android项目的一件事是这个答案可能不适用于Windows主机。我想知道是否可以同时处理这两个平台..
猜你喜欢
  • 2014-10-21
  • 2013-12-29
  • 2016-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多