编辑:我找到了可能的原因,但我不明白原因:删除以下脚本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
我的构建脚本不正确吗?我做错了什么?
编辑: 更多信息。我刚注意到在生成的D:\ externals \ src \ Release \ zlib_external-build \ zlib.sln中,根本没有选择INSTALL目标进行构建。如果我检查它是否为Release配置构建,然后点击visual studio中的“Build”,则INSTALL目标会构建并安装我期望它们的文件。我不知道发生了什么......
答案 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