CMake: как определить все файлы .DLL / .SO, которые нужны для исполняемого файла? - PullRequest
8 голосов
/ 12 мая 2011

Давайте предположим, что моей программе нужно несколько DLL для работы.Я должен предоставить эти библиотеки пользователю в моем дистрибутиве.На данный момент мне нужны QtCore4.DLL, QtGui4.DLL, msvcp90.DLL, msvcr90.DLL, mylib.DLL, Kernel32.DLL ...

Было бы неплохо, если бы CMake мог получить полный список библиотек DLL (или.ТАК) файлы.Затем я удалил бы такие элементы, как «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 ]

1 голос
/ 15 мая 2011

По предложению Андре, есть InstallRequiredSystemLibraries для поиска / установки правильной среды выполнения C / C ++.Существует также BundleUtilities , который можно использовать для поиска других зависимостей вашего приложения, библиотеки и / или плагинов.

Он никогда не сможет подобрать такие вещи, как загружаемые плагины во время выполнения, но вы можетеих вместе с каталогами библиотеки, которые следует использовать.В самых последних версиях CMake было сделано несколько улучшений, чтобы повысить надежность BundleUtilities на всех платформах.

1 голос
/ 12 мая 2011

Вы можете использовать Dependency Walker на окнах (или инструмент для создания дампа cmd-line из Visual Studio). Однако на самом деле это не решение CMake, и в Cmake нет действительно стандартного решения.

Однако существует модуль InstallRequiredSystemLibraries , который можно использовать для получения системных библиотек (msvc [r | p] 90.dll с msvc и mingw10.dll с mingw).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...