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

CMake: how to determine all the .DLL/.SO files that are need for an executable?

本文关键字:可执行文件 文件 SO DLL 何确定 CMake      更新时间:2023-10-16

假设我的程序需要几个DLL才能工作。我应该在我的发行版中向用户提供该 DLL。现在我需要QtCore4.DLL,QtGui4.DLL,msvcp90.DLL,msvcr90.DLL,mylib.DLL,Kernel32.DLL...

如果 CMake 可以获得 DLL 的完整列表(或 .所以)文件。然后我会从该列表中删除像"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。

谢谢!

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

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

正如Andre所建议的那样,有InstallRequiredSystemLibraries用于查找/安装正确的C/C++运行时。还有 BundleUtilities 可用于查找应用程序、库和/或插件的其他依赖项。

它永远不能像运行时加载的插件那样拾取东西,但您可以将它们与应该使用的库目录一起添加。在最新版本的CMake中,已经进行了相当多的改进,以使BundleUtilities在所有平台上更加可靠。

相关文章: