5

編集:考えられる原因を見つけましたが、理由がわかりません: 以下のスクリプトの最後の行を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 はDebugReleaseの両方をビルドし、DLL のデバッグ バージョンをD:\externals\bin\zlibd.dll

私のビルドスクリプトは正しくありませんか? 私は何を間違っていますか?

編集: いくつかの詳細情報。さっき気付いた。生成された D:\externals\src\Release\zlib_external-build\zlib.sln では、INSTALL ターゲットがビルド対象としてまったく選択されていません。リリース構成用にビルドするようにチェックしてから、ビジュアルスタジオから「ビルド」をクリックすると、INSTALL ターゲットがビルドされ、期待する場所にファイルがインストールされます。何が起こっているのかわかりません...

4

2 に答える 2

-3

DCMAKE_CFG_INTDIR 変数を使用します。

...
CMAKE_ARGS
    ...
    -DCMAKE_CFG_INTDIR=Release
于 2014-03-10T12:28:26.523 に答える