CMake:如何确定可执行文件所需的所有.DLL/.SO文件?

8
假设我的程序需要几个DLL文件才能正常运行。我应该在我的分发中提供这些DLL文件给用户。目前,我需要QtCore4.DLL、QtGui4.DLL、msvcp90.DLL、msvcr90.DLL、mylib.DLL和Kernel32.DLL等文件。
如果CMake可以获得完整的DLL(或.SO)文件列表,那就太好了。然后我将从该列表中删除像“Kernel32.DLL”这样的项目,并将DLL文件复制到我的分发中。
我不能保证下一次构建将在同一版本的Visual Studio上完成,因此硬编码路径,如“C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT”或“E:\Qt\4.6.3”,不适合搜索DLL文件。
谢谢!
2个回答

1
根据安德烈的建议,可以使用InstallRequiredSystemLibraries来查找/安装正确的C/C++运行时。还有BundleUtilities可用于查找应用程序、库和/或插件的其他依赖项。
它无法自动检测到运行时加载的插件,但是您可以将它们与应该使用的库目录一起添加。在最新版本的CMake中,已经进行了相当多的改进,以使BundleUtilities在所有平台上更加可靠。

1

在Windows上,您可以使用Dependency Walker(或来自Visual Studio的cmd-line dumpbin工具)。但是这不是真正的CMake解决方案,也没有真正的标准解决方案。

然而,有InstallRequiredSystemLibraries模块,您可以使用它来获取系统dll文件(msvc[r|p]90.dll与msvc和mingw10.dll与mingw)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接