2014-10-18 90 views
2

使用CMake的ExternalProject_Add,我自動構建了我的依賴關係。但是,即使我通過CMAKE_BUILD_TYPEBUILD_SHARED_LIBS(如in the Tutorial所述),我的構建配置最終也不匹配。如何爲特定配置生成Visual Studio項目?

# 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構建發行版和調試版本?

回答

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

要建立兩個發佈和調試版本,添加另一個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 
    ... 
    ) 
+0

非常感謝。所以我可以使用'cmake --build --config release'在發佈模式下構建一個已配置的項目?它有一個選項可以在一個命令中構建Release和Debug?而且,在單個配置環境中(我認爲GCC是一個),我仍然可以使用'--config'標誌覆蓋構建的配置類型嗎? – danijar 2014-10-19 14:10:57

+0

第一個問題:是的。 第二個問題:沒有一個命令。你必須調用cmake兩次。 第三個問題:編號 – sakra 2014-10-19 14:38:09

+0

但'cmake --build'默認爲'CMAKE_BUILD_TYPE'中設置的配置,對吧? – danijar 2014-10-19 14:49:39

相關問題