2011-05-11 22 views
6

Supongamos que mi programa necesita varias DLL para funcionar. Debo proporcionar esos archivos DLL al usuario en mi distribución. Por ahora necesito QtCore4.DLL, QtGui4.dll, msvcp90.dll, Msvcr90.dll, mylib.DLL, Kernel32.DLL ...CMake: cómo determinar todos los archivos .DLL/.SO que se necesitan para un ejecutable?

Sería bonito si CMake podría obtener la lista completa de los archivos DLL (o .so) archivos. Luego eliminaría elementos como "Kernel32.DLL" de esa lista y copiaría los archivos DLL en mi distribución.

No puedo garantizar que la próxima compilación se realice en la misma versión de Visual Studio, por lo que las rutas de codificación difícil como "C: \ Archivos de programa \ Microsoft Visual Studio 9.0 \ VC \ redist \ x86 \ Microsoft. VC90.CRT "o" E: \ Qt \ 4.6.3 "no es bueno para buscar los archivos DLL.

Gracias!

Respuesta

1

Puede usar Dependency Walker en windows (o la herramienta de volcado cmd-line de visual studio). Sin embargo, esto no es realmente una solución CMake y no hay una solución estándar con Cmake.

Sin embargo, existe el módulo InstallRequiredSystemLibraries, que puede usar para obtener los archivos DLL del sistema (msvc [r | p] 90.dll con msvc y mingw10.dll con mingw).

1

Según lo sugerido por Andre, hay InstallRequiredSystemLibraries para encontrar/instalar el tiempo de ejecución correcto de C/C++. También hay BundleUtilities que se puede usar para encontrar las otras dependencias de su aplicación, biblioteca y/o complementos.

Nunca puede recoger cosas como complementos cargados en el tiempo de ejecución, pero puede agregarlos junto con los directorios de la biblioteca que se deben utilizar. En las versiones más recientes de CMake, se han realizado algunas mejoras para hacer que BundleUtilities sea más confiable en todas las plataformas.

Cuestiones relacionadas