【问题标题】:ExternalProject_Add doesn't install the Release configuration of the projectExternalProject_Add 不安装项目的发布配置
【发布时间】:2013-05-05 13:05:39
【问题描述】:

编辑:我找到了可能的原因,但我不明白为什么:以下脚本中的最后一行 Project(Externals) 删除后修复了我的问题。那么现在的问题是为什么?

cmake_minimum_required(VERSION 2.8)

include(ExternalProject)

MACRO(EXTERNAL_DEF aNewTargetName aPathToSource)
  ExternalProject_Add(
    ${aNewTargetName}
    PREFIX ${CMAKE_INSTALL_PREFIX}
    SOURCE_DIR ${aPathToSource}

    TMP_DIR      "${CMAKE_INSTALL_PREFIX}/tmp/${CMAKE_BUILD_TYPE}"
    DOWNLOAD_DIR "${CMAKE_INSTALL_PREFIX}/src/${CMAKE_BUILD_TYPE}"
    BINARY_DIR   "${CMAKE_INSTALL_PREFIX}/src/${CMAKE_BUILD_TYPE}/${aNewTargetName}-build"
    STAMP_DIR    "${CMAKE_INSTALL_PREFIX}/src/${CMAKE_BUILD_TYPE}/${aNewTargetName}-stamp"
    CMAKE_ARGS
      -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
      -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
      --debug-output
    BUILD_COMMAND "${CMAKE_COMMAND}" --build
      "${CMAKE_INSTALL_PREFIX}/src/${CMAKE_BUILD_TYPE}/${aNewTargetName}-build" --config "${CMAKE_BUILD_TYPE}"
    #INSTALL_DIR "${CMAKE_INSTALL_PREFIX}"
    )
ENDMACRO()

get_filename_component(zlibAbsPath "./zlib" ABSOLUTE)
EXTERNAL_DEF(zlib_external ${zlibAbsPath})
Project(Externals)

我在上面的 CMakeLists.txt 文件上调用 cmake,将 CMAKE_INSTALL_PREFIX 设置为让我们说 "d:\externals"CMAKE_BUILD_TYPE 设置为 "Release"

预期: 我希望只构建 Release 配置。在它建成后,我希望它会安装在D:\externals\bin\zlib.dll

问题: 实际上,ExternalProject_Add 构建了一个 Debug 和一个 Release,并在D:\externals\bin\zlibd.dll

中安装了 dll 的调试版本

我的构建脚本不正确吗?我做错了什么?

编辑: 更多信息。我刚注意到。在生成的D:\externals\src\Release\zlib_external-build\zlib.sln中,根本没有选择INSTALL目标来构建。如果我检查它以构建发布配置,然后从 Visual Studio 中点击“构建”,则 INSTALL 目标将构建并安装我期望的文件。我不知道发生了什么......

【问题讨论】:

    标签: cmake external-project


    【解决方案1】:

    CMAKE_BUILD_TYPE only work with single-configuration projects

    你可以改成:

    ....
       BUILD_COMMAND ""
       INSTALL_COMMAND
            cmake
            --build .
            --target install
            --config Release
        BUILD_ALWAYS 1 
    ...
    

    【讨论】:

      【解决方案2】:

      使用 DCMAKE_CFG_INTDIR 变量。

      ...
      CMAKE_ARGS
          ...
          -DCMAKE_CFG_INTDIR=Release
      

      【讨论】:

      • 来自CMAKE_CFG_INTDIR的文档:This variable is read-only. Setting it is undefined behavior.
      猜你喜欢
      • 1970-01-01
      • 2018-03-05
      • 2019-07-20
      • 2013-11-27
      • 2017-10-05
      • 1970-01-01
      • 1970-01-01
      • 2019-06-25
      • 2021-01-15
      相关资源
      最近更新 更多