问题
Using CMake's ExternalProject_Add
, I automate builds of my dependencies. However, I build configurations don't match in the end even though I pass CMAKE_BUILD_TYPE
and BUILD_SHARED_LIBS
as described in the Tutorial.
# SFML
include(ExternalProject)
set(SFML_PREFIX ${CMAKE_SOURCE_DIR}/SFML)
# Download, configure, build and install.
ExternalProject_Add(SFML
# DEPENDS
PREFIX ${SFML_PREFIX}
TMP_DIR ${SFML_PREFIX}/temp
STAMP_DIR ${SFML_PREFIX}/stamp
#--Download step--------------
GIT_REPOSITORY https://github.com/LaurentGomila/SFML.git
GIT_TAG e2c378e9d1
#--Update/Patch step----------
UPDATE_COMMAND ""
#--Configure step-------------
SOURCE_DIR ${SFML_PREFIX}/source
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${SFML_PREFIX}/install
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
#--Build step-----------------
BINARY_DIR ${SFML_PREFIX}/build
#--Install step---------------
INSTALL_DIR ${SFML_PREFIX}/install
)
# Set root so that find module knows where to look.
set(SFML_ROOT ${SFML_PREFIX}/install)
How can I generate a Visual Studio project that builds release versions, instead of falling back to debug mode with no command line arguments provided? Is there even a way to generate a project that builds both release and debug versions with one msbuild Project.sln
?
回答1:
For multi-configuration generators (e.g., Visual Studio), the actual build configuration (Debug or Release) is specified upon building the project. Setting the CMAKE_BUILD_TYPE
at configuration time does not have an effect.
When a Visual Studio generator is used, the ExternalProject_Add
command sets up the build process of the external project so that the project uses the build configuration currently selected in the IDE. In CMake terms that means the following code is executed:
cmake --build <BINARY_DIR> --config ${CMAKE_CFG_INTDIR}
For Visual Studio 10 ${CMAKE_CFG_INTDIR}
is replaced with $(Configuration)
at build time.
To always do a Release build, you have to replace the ExternalProject_Add
default build step with a custom one:
ExternalProject_Add(SFML
...
#--Build step-----------------
BINARY_DIR ${SFML_PREFIX}/build
BUILD_COMMAND
${CMAKE_COMMAND} --build <BINARY_DIR> --config Release
...
)
To build both the Release and Debug versions, add another cmake invocation:
ExternalProject_Add(SFML
...
#--Build step-----------------
BINARY_DIR ${SFML_PREFIX}/build
BUILD_COMMAND
${CMAKE_COMMAND} --build <BINARY_DIR> --config Release
COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config Debug
...
)
来源:https://stackoverflow.com/questions/26440988/how-can-i-generate-visual-studio-projects-for-a-specific-configuration