2014-11-20 7 views
3

Я бегу проект, который имеет следующую структуру:CMake fixup_bundle для нескольких исполняемых файлов

root/ 
---Applications/ 
    ---Application1/ 
    ---Application2/ 
---Modules/ 
    ---Library1/ 
    ---Library2/ 

До сих пор, все создание проекта и увязка работ отлично на обеих машинах Windows, и Linux, используя в качестве зависимостей Qt5 и OpenCV. Все полученные файлы должны быть скопированы в окончательный путь установки:

INSTALL_DIR/ 
---bin/   #(for runtime) 
---include/  #(for .h files) 
---lib/   #(for lib files) 

Проблемы начинаются, когда я хочу, чтобы создать распространяемый пакет. мне удалось создать сценарий для каждого приложения:

include("${CMAKE_ROOT}/Modules/BundleUtilities.cmake")  
fixup_bundle("@[email protected]" "@[email protected]" "@[email protected]") 

Таким образом, к сожалению, fixup_bundle называется так много, как число моих приложений, и это занимает много времени, особенно под Windows.

Как создать уникальный скрипт установки, который выполняет только после fixup_bundle?

Заранее спасибо

+0

Я смущен о том, какое поведение вы ожидаете. Если fixup_bundle должен создать отдельный комплект для каждого приложения, он должен сделать это для каждого приложения. Вы действительно компилируете большое количество приложений, которые необходимо изолировать? – Praxeolitic

+0

Приложения имеют одинаковые зависимости, поэтому fixup_bundle также может запускать один раз, если это возможно, вместо нескольких раз. Я ошибаюсь? – madduci

+0

Я думаю, что цель fixup_bundle - полностью изолировать приложения. Есть ли причина не просто иметь несколько исполняемых файлов в качестве целей? Таким образом, они могут совместно использовать ресурсы, например. библиотеки. – Praxeolitic

ответ

1

Я вижу проблему сейчас.

Похож на эту проблему has been discussed on the CMake mailing list.

В ОП обозначен такой подход, который считался разумным.

  1. Установите все общие библиотеки зависимостей 3rdparty где-то в/Library/Application Support.
  2. Установите небольшие сценарии оболочки для обоих приложений, которые устанавливают DYLD_LIBRARY_PATH, чтобы указать, где установлены библиотеки 3rdparty, , затем запустите приложение.

Kitware CMake вики описывает подобный подход, в котором совместно используемых библиотек устанавливаются как OSX Framework.

http://www.cmake.org/Wiki/CMake:MacOSX_Frameworks

Он гласит: "Создание рамок только начинается." но похоже, что он не обновлялся некоторое время.

Похоже, что это не то, что CMake легко делает из коробки на данный момент.

Я нашел пример CMakeLists.txt, который устанавливает OSX Framework.

https://qt.gitorious.org/pyside/cgoncalves-apiextractor/source/d6568bba4798e05635c52ab4bd864dca9f828615:CMakeLists.txt#L176

+0

Я хочу сказать, что мои приложения действительно используют одни и те же библиотеки. Я ищу что-то, что ускоряет fixup_bundle и создает один уникальный пакет, содержащий все эти приложения. Подумайте, как набор небольших инструментов командной строки одного и того же пакета. – madduci

+0

Спасибо за ответ. Я попытаюсь адаптировать это к Linux и Windows, если это может сработать. – madduci

Смежные вопросы