【问题标题】:Setting environment variables to ExternalProject_Add context将环境变量设置为 ExternalProject_Add 上下文
【发布时间】:2020-07-23 17:28:50
【问题描述】:

我有一个 CMakeLists.txt 文件,其中有多个我需要构建的外部项目。我正在使用 CMake 的 ExternalProject_Add 功能。

我需要在 ExternalProject_Add 项目模块之一中设置一个环境变量。项目需要它来执行构建。

我尝试使用 ${CMAKE_COMMAND} -E env 选项,但没有奏效:

CONFIGURE_COMMAND
    ${CMAKE_COMMAND} -E env ANDROID_SDK_ROOT="/home/subbu/Android/Sdk"
    ${CMAKE_COMMAND} -E env ANDROID_API_VERSION="android-22"
    <SOURCE_DIR>/configure
    -prefix <INSTALL_DIR>
    -debug

我无法在网上找到示例。

请指教。

提前感谢您的帮助。

分部

【问题讨论】:

  • 描述“没有用”是没有用的。这种方法究竟有什么问题?您有错误或其他问题吗?请在描述问题时具体。您的方法应该为 configuration 阶段设置变量(但不是为其他阶段:buildtest 等)。但最好删除第二个${CMAKE_COMMAND} -E env:您可以在单个cmake -E env 包装器中指定多个环境变量。
  • 顺便说一句,这里是一个例子:stackoverflow.com/questions/55708589/….
  • @Tsyvarev - 我正在使用 ExternalProject_Add 功能构建 Qt 库。我正在通过 cmake configure 命令调用“配置”脚本,以便为以后的构建准备 Qt。但是,此配置要求我设置 ANDROID_SDK_ROOT 和 ANDROID_API_VERSION 环境变量才能成功。我会试试你的例子。谢谢你的回复!!!

标签: linux cmake cmake-format cmakelists-options


【解决方案1】:

我正在为 msgpack 做类似的事情,我能够通过执行以下操作使其工作:

set (MsgpackBundle msgpack-1.4.1.tar.gz)
ExternalProject_Add(MsgpackBuilder
    URL ${CMAKE_CURRENT_SOURCE_DIR}/${MsgpackBundle}
    URL_MD5 ${MsgpackBundleMd5}
    CONFIGURE_COMMAND
    ${CMAKE_COMMAND} -E CFLAGS=${MsgpackCflags}
    ${CMAKE_COMMAND} -E env CXXFLAGS=${MsgpackCflags}
    ${CMAKE_COMMAND} -E env LDFLAGS=${MsgpackLdflags}
    ./configure
         --prefix=${DependenciesInstallDir}
         --host=${MsgpackHost}
         --disable-shared
    BUILD_IN_SOURCE true
    BUILD_COMMAND
    make V=1
    INSTALL_COMMAND
    make install)

MsgpackCflagsMsgpackLdflags 是预先计算的,具体取决于目标系统。 MsgpackHost 由交叉编译工具链使用(x86_64-linux-gnu 用于主机构建),${DependenciesInstallDir} 也是一个预先计算的路径,因不同的操作系统/架构/构建配置(调试、发布)而异元组。 MsgpackbundleMd5md5sum msgpack-1.4.1.tar.gz 的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 2013-01-29
    • 2015-02-06
    相关资源
    最近更新 更多