Premake project build / config script: Как разрешить пользователю добавлять свои собственные пути в массив путей с помощью libs (libdirs) и include (includeirs)? - PullRequest
0 голосов
/ 08 марта 2011

У меня есть простой проект консольного приложения для потоковой передачи видео в реальном времени с использованием кроссплатформенных библиотек на каком-либо TCP-сервере.Я перенес его вручную на Linux и Mac OS X из Windows.Итак, теперь у меня есть 3 проекта, использующих один и тот же код, каждый из которых создан вручную и протестирован.Сейчас я пытаюсь создать файл создания предварительных проектов lua для автоматизации процесса обновления файлов проектов.

Я начал создавать файл lua

У меня есть массив ссылок lib в моей сборке premake lua.file У меня есть массив ссылок lib, необходимых для моего проекта.

Некоторые из них как бы повторяют некоторые, а некоторые нет (потому что, например, в Windows есть «openal32» (даже в 64-битной версии Windows 7)и гораздо более простое имя "openal" в Linux и "OpenAL.framework" в Mac OS X (и это единственный вариант в Mac OS, чтобы включить openAL)

У меня есть набор свойств linkdirs - один для всех систем

libdirs {
"/opt/local/lib",
"/System/Libarary/Frameworks",
"/Library/Frameworks",
"/usr/lib",
"/usr/local/lib" }

Возможно, ссылки на каталоги будут работать для Mac OS X (потому что мы используем порты Mac, которые по умолчанию устанавливаются в /opt/local/lib) и Linux (где мы в основном используем аналоги app-get, которые автоматически устанавливают все вusr/lib, а иногда и в /usr/local/lib). Но в Windows вы никогда не знаете, где находится ffmpeg или где установлен boost (вероятно, у каждого программиста есть свое представление, где хранить windowsLibs и Headers ...) поэтому нам нужна простая вещь из premake:

Действие для добавления пользовательских каталогов библиотек, которые будут включены в массив libdirs, и то же самое для массива includedirs.Он может добавить несколько каталогов.

Как включить такую ​​вещь?

Я пытался создать «систему на основе опций», такую ​​как

newoption {
trigger = "libsPath",
value = "PATH",
description = "Choose a particular directory for general libs search"
}
if not _OPTIONS["libsPath"] then
_OPTIONS["libsPath"] = NULL
end

libdirs {
"/opt/local/lib",
"/System/Libarary/Frameworks",
"/Library/Frameworks",
"/usr/lib",
"/usr/local/lib",
_OPTIONS["libsPath"]
}

, нокажется, не работает на окнах ... что мне делать?

Ответы [ 2 ]

4 голосов
/ 11 марта 2011

Вам не нужен этот бит:

if not _OPTIONS["libsPath"] then
   _OPTIONS["libsPath"] = NULL
end

Он уже будет равен нулю (эквивалент NULL в Lua), если он не установлен.В противном случае это выглядит хорошо и прекрасно работает для меня.

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

C:\> premake4 /libsPath=C:\Code\Libs;C:\Code\MoreLibs vs2010

Вы бы добавили его к своим путям поиска в библиотеке следующим образом:

-- Split it up
libdirs { string.explode(_OPTIONS["libsPath"], ";") }

Не проверено, но должно работать.Надеюсь, это поможет!

0 голосов
/ 08 марта 2011

Если вы хотите, чтобы пользователь мог указать каталоги include или библиотеки, одним из самых простых способов является использование переменной окружения.Когда ваши скрипты запускаются, они могут искать переменные среды с именами EXTRA_LIB_PATHS и EXTRA_INCLUDE_PATHS (или как вы хотите их называть) и добавлять пути, перечисленные там, в предварительно определенные списки путей, которые вы упомянули.

В Windows, Linux и OSX есть понятие переменных среды, но они не используют один и тот же формат.Список путей к каталогам в переменной среды Windows обычно разделяется точками с запятой, где Linux обычно использует двоеточия.Вы должны убедиться, что ваш код, который анализирует переменные среды, может обнаружить текущую платформу и использовать соответствующий метод для извлечения данных.

Другая возможность - передать пути к каталогам в качестве параметров командной строки дляваш сценарий premake (с использованием синтаксиса типа premake.lua -L/path/to/lib -I/my/include/path -L/another/lib/path и т. д.).Недостатком является то, что командная строка может быть довольно длинной, и некоторые консоли могут иметь ограничение на длину команды CLI.Если вы будете использовать больше, чем несколько дополнительных путей, я бы рекомендовал использовать переменную среды поверх аргументов CLI.

...