【问题标题】:How can I generate Visual Studio projects for a specific configuration?如何为特定配置生成 Visual Studio 项目?
【发布时间】:2014-12-13 23:30:47
【问题描述】:

使用 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 生成一个同时构建发布和调试版本的项目?

【问题讨论】:

    标签: msbuild cmake sfml


    【解决方案1】:

    对于多配置生成器(例如 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
        ...
        )
    

    【讨论】:

    • 非常感谢。所以我可以只使用cmake --build --config Release 在发布模式下构建配置项目吗?是否可以在一个命令中同时构建发布和调试?此外,在单一配置环境中(我想 GCC 是其中之一),我是否仍然可以使用 --config 标志覆盖构建时的配置类型?
    • 第一个问题:是的。第二个问题:不是一个命令。您必须调用 cmake 两次。第三个问题:没有。
    • 但是cmake --build默认是CMAKE_BUILD_TYPE里设置的配置吧?
    • 没有。对于多配置构建,CMAKE_BUILD_TYPE 会被忽略。默认构建配置通常是CMAKE_CONFIGURATION_TYPES中的第一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多