Хорошая практика: как определить путь к внешним библиотекам для компиляции - PullRequest
1 голос
/ 30 января 2020

Я совершенно не привык к проектам компиляции и сборки, поэтому извините, если мой подход к компиляции и сборке кажется немного странным. Любые советы приветствуются.

В настоящее время я работаю над проектом C ++ по трехмерной геометрии (который является DLL). Этот проект использует внешние библиотеки DLL, такие как BOOST. Поэтому при создании проекта мне нужно определить каталоги, в которых находятся файлы .dll, .lib и .h / .hpp.

В настоящее время я использую scons для сборки проекта и определите эти пути прямо в файле SConstruct.

Однако эти пути позже повторно используются для других операций сборки. (В данном случае компиляция кода C ++ в MEX для matlab, но на самом деле это не точка здесь).

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

С того места, где я стою, я вижу две альтернативы:

  • Сначала я мог бы спросить пользователь может определять переменные окружения и читать их из моих сценариев сборки. Однако я не очень доволен этим решением, так как оно требует от пользователя дополнительных манипуляций, и, насколько я понимаю, я теряю кроссплатформенную переносимость, которую предлагает scons. (Я знаю, что это все еще возможно, но требует некоторых дополнительных шагов, и я бы хотел, чтобы все было как можно проще)

  • Во-вторых, я мог бы определить весь свой путь в одном .txt ( или что-то подобное) в root моего проекта и прочитайте его из моих сценариев сборки. Однако это делает процесс чувствительным к опечаткам и ошибкам синтаксического анализа, что на самом деле мне не по вкусу.

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

  1. Пользователь может вводить только один раз каждый путь
  2. Это делается в папке проекта через файл или что-то еще
  3. настолько надежно, насколько это возможно
  4. Не требует слишком много дополнительной загрузки / установки (я не хочу, чтобы пользователь устанавливал для этого совершенно новое программное обеспечение. Однако я ' я в порядке с чем-то вроде простого легкого .exe, который я могу добавить в файлы моего проекта)

1 Ответ

1 голос
/ 30 января 2020

Переменные SCons, вероятно, ваш лучший выбор здесь.

См .: https://scons.org/doc/production/HTML/scons-user.html#sect -command-line-variable

Это позволяет читать значения по умолчанию из файла:

vars = Variables('custom.py')

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

...