c++ - CMake:如何根据配置和体系结构将不同的文件复制到构建目录

标签 c++ visual-c++ cmake post-build-event post-build

我正在生成我的 vcxprojsln MSVC 的文件与 CMake .我想复制一些 dlls在构建目录中为 POST_BUILD根据我是否正在构建不同的事件 DebugRelease配置及是否为x86x64建筑学。我正在使用 add_custom_command以下方式

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

如何正确地做到这一点?

最佳答案

试试这个:

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

关于c++ - CMake:如何根据配置和体系结构将不同的文件复制到构建目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44909613/

相关文章:

Xcode 中的 C++ Quantlib EXC_BAD_ACCESS

c# - 将图像从 unity 传递到 opencv

c++ - 未命名的命名空间和 Visual C++ 链接器性能

c++ - 预编译 header 的实际工作原理

c++ - 找到小行星的最近位置c++

c++ - CMake 错误 : "add_subdirectory not given a binary directory"

C++ DirectX CreateDevice 从全窗口游戏

c++ - char* 和 char** 的问题 (C --> C++)

python - Boost:Python: undefined symbol :_ZN5boost6python15instance_holder8allocateEP7_objectmmm

c++ - CMAKE: "No CMAKE_CXX_COMPILER could be found."