现有的解决方案建议使用add_custom_command
,这是有效的,但我认为它很难看,而且容易出错,所以我想知道当我声明我的第三方库时,是否有办法说任何使用我的库的可执行文件都应该将dll复制到可执行文件的构建位置。显然,在发布/调试中支持不同的dll也是必要的。
由于您正在构建dll,因此您显然在Windows上。但在Linux上,我只想评论一下,可以为二进制文件设置RPATH。在Cmake中,这看起来有点像
set_target_properties(target PROPERTIES INSTALL_RPATH ${path_to_libs})
# Maybe also this line...
target_link_libraries(target PUBLIC -Wl,--disable-new-dtags)
我不知道这对Windows有什么影响。然而,在Linux中,这基本上"告诉"二进制文件在哪里查找需要链接的库,从而避免了将库复制到同一目录或将库复制至标准库路径的需要。
如果您在Cmake中有一个目标a,并且您导出该目标,或者将其作为子目录(通过add_subdirectory(包含在另一个Cmake项目中,那么您可以很容易地将所有共享库捆绑到目标中,如下所示:
目标A:的CMakeLists.txt
add_library(A ... )
target_link_libraries(A PUBLIC other_libs_needed_by_consumers_of_A)
目标B:的CMakeLists.txt
target_link_libraries(B PUBLIC A)