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

pav*_*din 8 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.

谢谢!

And*_*dré 1

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

不过,有一个InstallRequiredSystemLibraries模块,您可以使用它来获取系统 dll(对于 msvc,为 msvc[r|p]90.dll;对于 mingw,则为 mingw10.dll)。