ExternalProject_Add不安装项目的Release配置

时间:2013-05-05 13:05:40

标签: cmake external-project

编辑:我找到了可能的原因,但我不明白原因:删除以下脚本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目标进行构建。如果我检查它是否为Release配置构建,然后点击visual studio中的“Build”,则INSTALL目标会构建并安装我期望它们的文件。我不知道发生了什么......

2 个答案:

答案 0 :(得分:2)

CMAKE_BUILD_TYPE only work with single-configuration projects

你可以改为:

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

答案 1 :(得分:-3)

使用DCMAKE_CFG_INTDIR变量。

...
CMAKE_ARGS
    ...
    -DCMAKE_CFG_INTDIR=Release