如何将环境变量传递给 ExternalProject_Add CONFIGURE_COMMAND?

Posted

技术标签:

【中文标题】如何将环境变量传递给 ExternalProject_Add CONFIGURE_COMMAND?【英文标题】:How to pass an environment variable to 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 是的,我做到了,但完全忘记提及了。我必须在我的代码中找到它。 【参考方案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 我不确定我是否理解。您可以使用$ENVENV_NAME 获取环境变量 @SteveTJS 如果遵循这个答案,我希望它能够工作。 android项目的一件事是这个答案可能不适用于Windows主机。我想知道是否可以同时处理这两个平台..

以上是关于如何将环境变量传递给 ExternalProject_Add CONFIGURE_COMMAND?的主要内容,如果未能解决你的问题,请参考以下文章

如何将环境变量传递给pytest

如何将环境变量传递给前端 Web 应用程序?

如何在传递 ShellCheck 时通过环境变量将 glob 传递给 shell 脚本

如何使用 process.env 将环境变量中的 API 密钥传递给 Ember CLI?

我应该如何将敏感的环境变量传递给 Amazon ECS 任务?

将主机环境变量传递给 dockerfile