#dll #cmake #freeimage
#dll #cmake #свободное изображение
Вопрос:
Я работаю над сценариями cmake для своего проекта и столкнулся с проблемой:
В моем проекте используется сторонняя библиотека (FreeImage), которая имеет свою собственную систему сборки на основе Makefile. Я могу создать FreeImage просто отлично, просто запустив «make» (я использую gnuwin32), который создаст FreeImage с использованием MinGW и произведет:
FreeImage.lib
FreeImage.dll
Теперь моя проблема двоякая:
- Я хочу выполнить «make» из моего скрипта cmake.
- Я хочу создать ссылку на библиотеку импорта (FreeImage.lib), а также убедиться, что DLL скопирована в правильное место, чтобы EXE-файл был запущен.
Я знаю, как создать ссылку на файл библиотеки, но я теряюсь в остальном.
Структура папок выглядит следующим образом:
MyProject # main directory
MyProject/Libs/FreeImage # FreeImage root directory
MyProject/Libs/FreeImage/Dist # This is where FreeImage outputs go (LIB and DLL)
Кстати: я работаю на Windows 7. Я планирую создавать свой проект как с MSVC, так и с MinGW.
Спасибо!
РЕДАКТИРОВАТЬ: сейчас я пытаюсь использовать ExternalProject_Add следующим образом:
ExternalProject_Add(
FreeImage
PREFIX ./Libs/FreeImage
URL ./Libs/FreeImage
BUILD_COMMAND make
)
Это помогает мне частично, но не полностью работает … он пытается настроить что-то для меня и пытается использовать nmake … тьфу
Ответ №1:
На мой взгляд, есть два варианта:
В случае, если вы разместили исходные тексты FreeImage в дереве исходных текстов ваших проектов, самым простым вариантом может быть использование команды execute_process(). Предполагая, что FreeImage находится в дереве исходных текстов ваших проектов в «3rdparty / FreeImage /», вы можете сделать что-то вроде,
execute_process( COMMAND make WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/3rdParty/FreeImage )
При желании вы можете скопировать DLL из 3rdParty / FreeImage /bin в свой собственный каталог bin. И затем вы можете написать FreeImageConfig.cmake для импорта библиотеки:
добавьте библиотеку (ИМПОРТИРОВАННЫЙ FreeImage ) , установите_target_properties (ИМПОРТИРОВАННЫЕ СВОЙСТВА FreeImage $ {PROJECT_SOURCE_DIR}/3rdParty/FreeImage/lib ) …
Другой вариант — использовать модуль ExternalProject. Вы также можете взглянуть на эту статью из Kitware, чтобы получить обзор этого модуля. По сути, вы указываете полную цепочку команд, необходимых для получения исходного кода, настройки сборки, сборки исходного кода и его установки. Все в вашем собственном CMakeLists.txt
Комментарии:
1. Привет, спасибо за информацию. Я думаю, что хочу использовать модуль ExternalProject, но … тьфу… это очень сложно. У меня возникли проблемы даже с началом работы:-(
2. Я решил внедрить свою собственную систему сборки. Я думаю, что это на самом деле будет проще, чем пытаться заставить CMake делать некоторые действительно неудобные вещи. В любом случае спасибо за помощь. 🙂