让我们假设我的程序需要几个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。
谢谢!
答案 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在所有平台上都更加可靠。