是否有使用CMake复制dll的声明性方法



现有的解决方案建议使用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)

相关内容

  • 没有找到相关文章

最新更新