我正在爲MSVC
和CMake生成我的vcxproj
和sln
文件。我想在構建目錄中複製一些dlls
作爲POST_BUILD
事件,根據我是否構建Debug
或Release
配置以及它是否是x86
或x64
架構而不同。我使用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()
如何做到這正常嗎?
如果你研究了編譯器的輸出時--help調用,或--version會幫助? –
@Richard Hodges我不知道如何從** CMake **研究編譯器的輸出,以及如何使用** CMake **的'--help'或'--version'來調用它。 – bobeff
execute_process(COMMAND $ {CMAKE_CXX_COMPILER} --version/help?OUTPUT_VARIABLE compiler_output)或類似 –