Как найти компилятор в пути с номером версии в нем? - PullRequest
0 голосов
/ 02 февраля 2010

Я пытаюсь создать файл SConstruct для проекта встроенной системы. Компилятор на моей машине находится по адресу "C: \ Program Files \ IAR Systems \ Embedded Workbench 5.4 \ arm \ bin". Я бы хотел, чтобы система сборки попыталась найти цепочку инструментов, даже если установлена ​​другая версия Embedded Workbench или пользователь решил установить его в другом месте.

Мне также были бы интересны стратегии, используемые в make-файлах или файлах ant, поскольку они, вероятно, также полезны здесь.

Какие существуют стратегии для этого? У меня есть варианты, кроме поиска в реестре Windows или поиска «C: \ Program Files \ IAR Systems \ Embedded Workbench * \ arm \ bin»?

Ответы [ 3 ]

2 голосов
/ 02 февраля 2010

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

Например, в вашем случае вы можете иметь:

EWBARM_V0504 = "C: \ Program Files \ IAR Systems \ Embedded Workbench 5.4 \ arm \ bin"

И аналогично для других установленных версий, и тогда в вашей системе сборки вы будете использовать% EWBARM_V0504% вместо пути. Хуже всего будет то, что если переменная не существует, сборка не удастся, что предпочтительнее, чем использование неправильного компилятора, и ее легко исправить.

0 голосов
/ 04 февраля 2010

Приятной особенностью SCons является то, что в вашем распоряжении весь python. Таким образом, вы можете использовать win32.winreg, чтобы просматривать реестр или перемещаться по наборам путей, в зависимости от того, что вам подходит. И, конечно, у вас может быть опция командной строки или файл опций для переопределения автоопределения. Затем, как только вы нашли свой инструмент выбора, у вас есть два основных способа заставить его использовать SCons: либо предварительно вставить каталог инструмента в env ['ENV'] ['PATH'] (для этого вы можете использовать env.PrependEnvPath), или просто используйте полный путь к инструменту в качестве значения $ CC (и соответственно установите $ LINK, $ SHLINK и т. д.).

Я обычно делаю функцию TOOL_MYCOMPILER, которая берет env и настраивает его для использования с компилятором и его цепочкой инструментов (cpp, linker, что угодно). В вашем SConstruct / SConscript все будет чище.

0 голосов
/ 02 февраля 2010

Поскольку разные версии наборов инструментов могут иметь разные ошибки и / или функции, молчаливое возвращение к различным наборам инструментов, вероятно, является плохой идеей. Когда я поддерживал несколько версий инструментов в одном проекте, мне обычно присваивается номер версии через make-файл или среду. Затем вы можете передать -D TOOLS_VERSION=$(TOOLS_VERSION) вашему компилятору и использовать это значение для ключевых исправлений и обходных путей, необходимых для определенных версий инструментов. Эта система дает понять, какие инструменты вы хотите поддерживать, и в то же время позволяет другим разработчикам переключать версии инструментов, выполняя одно редактирование.

...