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

时间:2011-05-11 21:29:07

标签: c++ dll cmake

让我们假设我的程序需要几个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 个答案:

答案 0 :(得分:1)

您可以在Windows上使用Dependency Walker(或使用visual studio中的cmd-line dumpbin工具)。然而,这不是一个真正的CMake解决方案,并且Cmake没有真正的标准解决方案。

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

答案 1 :(得分:1)

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

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