如何通过cmake自动拷贝运行所需dll到executable目录

如何通过cmake自动拷贝运行所需dll到executable目录,第1张

给你的library定义一个带"IMPORTED" 属性的target,同时需要并为此定义lib和dll路径属性,需要区分debug和release。

链接此库用上面定义target的名字即可,这样会自动隐藏背后的不同版本的lib库文件

在CMakeLists.txt定义一个定制的build step来自动拷贝运行所需的dll文件:

通常,当你的项目集成了很多第三方库,以上这么干会把CMakeLists.txt搞得很复杂,因此推荐得方式还是得写FindXXX.cmake, 并在FindXXX.cmake里创建对应的target,关于如何写可以参考 这篇文章 。

有些第三方库提供已编译好的库文件且是多个,这时候上面的target不再能拷贝dll,而且会报错unknwon target,对于这种第三方库的target得如下定义:

拷贝DLL文件的command得改成如下方式:

其实,Qt打包时候拷贝DLL也是同样这个做法:

在项目当前目录下执行cmake . 注意后面有个点。然后进入lib目录下执行make install,如果没mingw32-make.exe的名字的话那么就应该是ming32-make.exe install就会在你指定的目录下生成dll了

我用的是jetbrain的clion,这是我项目的目录图,其中黑色的是VS2012的解决方案,如果有用的可以用

Cmake 有linux ,windows 多个平台版本,如图是windows下版本程序

更具一个简单多目录c项目,学下cmakelist.txt编写规范

根目录下cmakelist文件内容:

set(CMAKE_INSTALL_PREFIX):设置程序的安装目录,优先级比cmake命令参数设置高。

add_subdirectory(编译文件子目录)

libhello 目录下的cmakelist文件内容:

libhello 目录下的cmakelist文件内容:

查看编译后结果:

7

安装后目录结构:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11739473.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存