我们使用 CMake 在 SVN 中生成源代码的 Visual Studio 文件。现在我的工具需要一些 DLL 文件与可执行文件位于同一文件夹中。DLL 文件位于旁边的文件夹中...
我们使用 CMake 在 SVN 中生成源代码的 Visual Studio 文件。现在我的工具需要一些 DLL 文件与可执行文件位于同一文件夹中。DLL 文件位于源代码旁边的文件夹中。
我怎样才能更改 CMakeLists.txt
以使生成的 Visual Studio 项目已经在发布/调试文件夹中拥有特定的 DLL 文件或者在编译时复制它们?
今天,当我尝试为我的程序制作 Windows 版本时,我遇到了这个问题。由于所有这些答案都不能让我满意,所以我最终自己做了一些研究。主要有三个问题:
p1
p2
p3
在浏览一些 CMake 手册和 github 上的一些多平台项目后,我找到了这个解决方案:
使用“IMPORTED”属性将您的库声明为目标,引用其调试和发布.lib 和.dll 文件。
add_library(sdl2 SHARED IMPORTED GLOBAL)
set_property(TARGET sdl2 PROPERTY IMPORTED_IMPLIB_RELEASE "${SDL_ROOT_PATH}/lib/SDL2.lib")
set_property(TARGET sdl2 PROPERTY IMPORTED_LOCATION_RELEASE "${SDL_ROOT_PATH}/bin/SDL2.dll")
set_property(TARGET sdl2 PROPERTY IMPORTED_IMPLIB_DEBUG "${SDL_ROOT_PATH}/lib/SDL2d.lib")
set_property(TARGET sdl2 PROPERTY IMPORTED_LOCATION_DEBUG "${SDL_ROOT_PATH}/bin/SDL2d.dll")
照常将此目标与您的项目链接
target_link_libraries(YourProg sdl2 ...)
如果 dll 文件自上次构建后发生了某种改变,则进行自定义构建步骤以将其复制到目标位置
add_custom_command ( TARGET YourProg POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
$<TARGET_FILE:sdl2> $<TARGET_FILE_DIR:YourProg>
)