2017-07-04 78 views
0

我正在爲MSVCCMake生成我的vcxprojsln文件。我想在構建目錄中複製一些dlls作爲POST_BUILD事件,根據我是否構建DebugRelease配置以及它是否是x86x64架構而不同。我使用add_custom_command以下方式CMake:如何根據配置和體系結構複製不同的文件以建立目錄

add_custom_command(TARGET ${TARGET_NAME} POST_BUILD 
    COMMAND ${CMAKE_COMMAND} -E copy_if_different 
    ${FILES_TO_COPY} ${CMAKE_CURRENT_BINARY_DIR}) 

我想根據體系結構和配置設置FILES_TO_COPY不同的值,或根據相同的條件下使用不同的add_custom_command。但CMake的MSVC是多配置發電機和CMAKE_BUILD_TYPE是在它之下空的,我不能簡單地寫類似:

if (CMAKE_SIZEOF_VOID_P EQUAL 4) 
    if (CMAKE_BUILD_TYPE STREQUAL "Debug") 

    set (FILES_TO_COPY 
     "${CMAKE_SOURCE_DIR}/Externals/DLLs/bdb/Debug/i386/libdb52d.dll") 

    elseif (CMAKE_BUILD_TYPE STREQUAL "Release") 

    set (FILES_TO_COPY 
     "${CMAKE_SOURCE_DIR}/Externals/DLLs/bdb/Release/i386/libdb52.dll") 

    else() 
    message (FATAL_ERROR "Invalid configuration name ${CMAKE_BUILD_TYPE}.") 
    endif() 
elseif (CMAKE_SIZEOF_VOID_P EQUAL 8) 
    if (CMAKE_BUILD_TYPE STREQUAL "Debug") 

    set (FILES_TO_COPY 
     "${CMAKE_SOURCE_DIR}/Externals/DLLs/bdb/Debug/x64/libdb52d.dll") 

    elseif (CMAKE_BUILD_TYPE STREQUAL "Release") 

    set (FILES_TO_COPY 
     "${CMAKE_SOURCE_DIR}/Externals/DLLs/bdb/Release/x64/libdb52.dll") 

    else() 
    message (FATAL_ERROR "Invalid configuration name ${CMAKE_BUILD_TYPE}.") 
    endif() 
else() 
    message (FATAL_ERROR "Unsupported architecture with ${CMAKE_SIZEOF_VOID_P} 
    bytes pointer size.") 
endif() 

如何做到這正常嗎?

+0

如果你研究了編譯器的輸出時--help調用,或--version會幫助? –

+0

@Richard Hodges我不知道如何從** CMake **研究編譯器的輸出,以及如何使用** CMake **的'--help'或'--version'來調用它。 – bobeff

+1

execute_process(COMMAND $ {CMAKE_CXX_COMPILER} --version/help?OUTPUT_VARIABLE compiler_output)或類似 –

回答

2

試試這個:

set(arch "i386") 
if(CMAKE_SIZEOF_VOID_P EQUAL 8) 
    set(arch "x64") 
endif() 

set(FILES_TO_COPY "${CMAKE_SOURCE_DIR}/Externals/DLLs/bdb/$<CONFIG>/${arch}/libdb52$<$<CONFIG:Debug>:d>.dll") 
+0

+1 10x這適用於這種情況,但我無法接受這個答案,因爲文件的路徑不需要包含'Debug','Release','i386'或'x64'。對於其他文件,我必須添加路徑中的模式可以是不同的,如果有的話。 – bobeff

+1

@bobeff:對於一般情況,您可以使用'$ <$ :path-debug> $ <$ :path-release>'模式。請參閱生成器表達式的文檔:https://cmake.org/cmake/help/v3.7/manual/cmake-generator-expressions.7.html。 – Tsyvarev

+0

@Tsyvarev我認爲這完成了答案,我接受它。 – bobeff

相關問題