如何为特定配置生成Visual Studio项目?

时间:2014-10-18 14:45:27

标签: msbuild cmake sfml

使用CMake的ExternalProject_Add,我自动构建了我的依赖项。但是,即使我按照in the Tutorial所述传递CMAKE_BUILD_TYPEBUILD_SHARED_LIBS,我也会在最后建立不匹配的配置。

# 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)

如何生成构建发行版本的Visual Studio项目,而不是在没有提供命令行参数的情况下回退到调试模式?有没有办法生成一个项目,用一个msbuild Project.sln生成发布和调试版本?

1 个答案:

答案 0 :(得分:3)

对于多配置生成器(例如,Visual Studio),在构建项目时指定实际的构建配置(调试或发布)。在配置时设置CMAKE_BUILD_TYPE没有效果。

使用Visual Studio生成器时,ExternalProject_Add命令会设置外部项目的构建过程,以便项目使用IDE中当前选择的构建配置。在CMake术语中,表示执行以下代码:

cmake --build <BINARY_DIR> --config ${CMAKE_CFG_INTDIR}

对于Visual Studio 10,${CMAKE_CFG_INTDIR}在构建时被$(Configuration)替换。

要始终执行发布版本,您必须使用自定义构建步骤替换ExternalProject_Add默认构建步骤:

ExternalProject_Add(SFML
    ...
    #--Build step-----------------
    BINARY_DIR ${SFML_PREFIX}/build
    BUILD_COMMAND
        ${CMAKE_COMMAND} --build <BINARY_DIR> --config Release
    ...
    )

要构建Release和Debug版本,请添加另一个cmake调用:

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
    ...
    )