c++ - script - CMake: ¿cómo determinar todos los archivos.DLL/.SO que se necesitan para un ejecutable?
cmake script tutorial (2)
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 ...
Sería bueno si CMake pudiera obtener una lista completa de archivos DLL (o .SO). 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 código 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!
Según lo sugerido por Andre, hay InstallRequiredSystemLibraries para encontrar / instalar el tiempo de ejecución C / C ++ correcto. También hay BundleUtilities que se pueden usar para encontrar las otras dependencias de su aplicación, biblioteca y / o complementos.
Nunca puede recoger cosas como complementos cargados en tiempo de ejecución, pero puede agregarlos junto con los directorios de la biblioteca que se deben usar. 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.
Puede usar Dependency Walker en Windows (o la herramienta de volcado de línea de cmd desde 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).