如何将环境变量传递给 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_COMMAND
将CPPFLAGS="-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?的主要内容,如果未能解决你的问题,请参考以下文章
如何在传递 ShellCheck 时通过环境变量将 glob 传递给 shell 脚本
如何使用 process.env 将环境变量中的 API 密钥传递给 Ember CLI?