2015-04-06 2 views
1

У меня есть приложение с кросс-платформой, которое на данный момент использует два репозитория кода, поддерживается относительно независимо и построено с помощью VS/Xcode в зависимости от целевой платформы (соответственно win или mac). Я влюбился в Premake после использования его в нескольких предыдущих проектах и ​​пытаюсь объединить весь свой код для этого приложения в единую кросс-компилируемую кодовую базу.Ссылка на Mac Frameworks с использованием Premake и GNU Make

Я не хочу полагаться на Xcode и вместо этого хочу, чтобы любой разработчик мог строить на Mac, используя либо Xcode, либо gmake. У меня есть нестандартная среда, в которую я хочу установить ссылку и включить ее в репозиторий (она не будет находиться в/Library/Frameworks или любом из путей поиска по умолчанию для Mac). Я добавил файл фрейма в каталог в моем проекте /lib/TheFramework.framework. Мой файл premake содержит следующие под определение проекта:

includedirs {".", "lib", "lib/TheFramework.framework/Headers"} 
    libdirs {"lib"} 
    links {"TheFramework.framework"} 

Когда я компилирую, (бег $ premake5 gmake, а затем $ make), я получаю файл заголовка не найдена ошибка. Что-то не так с моими поисковыми путями? Я где-то пропускаю путь или флаг?

Спасибо!

+0

Какую версию Premake вы используете? – starkos

+0

Я использую Premake 5, но тестировался с 4.4, чтобы убедиться, что это не ошибка в альфа-версии. – tnbeatty

ответ

0

Прежде чем взглянуть на то, что вам нужно сделать с премьерой, давайте сначала посмотрим, что должно произойти под капотом.

При составлении программы макинтош с нестандартным рамок на GCC или звоном (что ваш результате сделать файл делает), необходимо сделать две вещи:

  1. указать имя структуры, через -framework TheFramework - это то, что premake делает, когда вы предоставляете его links {"TheFramework.framework"
  2. Укажите расположение рамок, через -F /Path/To/Framework/ - Это в настоящее время не обрабатывается автоматически premake.

Я сделал простой тест С Программой, которая использует рамку SDL2 и скомпилирован с GCC: https://gist.github.com/JohannesMP/6ff3463482ebbdc82c2e - обратите внимание, как, когда я ухожу от -F /... на флаге, я получаю сообщение об ошибке, которое, вероятно, похож на то, что вы описали.


Так что же происходит это, хотя вы обеспечиваете premake с включают директорию, premake не добавит, что надлежащее -F флаг.

Один из способов обойти это сделать следующее:

configuration {"macosx", "gmake"} 
    buildoptions {"-F /Path/To/Framework"} 
    linkoptions {"-F /Path/To/Framework"} 

(Смотрите здесь для примера проекта: https://gist.github.com/JohannesMP/9a9b5263c127103f1861#file-premake5-lua-L24-L26)

В premake5 это будет слепо Append код предоставленной как на этапе сборки, как а также шаг ссылки. Необходимо сделать это как для сборки, так и для ссылки.

Просто имейте в виду, что, поскольку premake не обрабатывает или не проверяет параметры сборки/ссылки на то, что они действительны, пользователь получит сообщение об ошибке, если предоставленный путь не существует на их машине.Например, если у вас может быть фреймворк в вашем пользовательском каталоге ~/Library/Frameworks, так как эта папка не существует по умолчанию, другой пользователь может использовать глобальный /Library/Frameworks вместо этого, и когда они попытаются скомпилировать ваш проект с gmake, они получат предупреждение:

ld: warning: directory not found for option '-F/Users/<NAME>/Library/Frameworks' 

на данный момент, кажется, что нет никакого «безопасный» способ получить premake5, чтобы попытаться включить рамочное путь, но это может измениться в будущем.

проверить этот вопрос я разместил на premake репо: https://github.com/premake/premake-core/issues/196

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