2012-03-01 4 views
1

Я наткнулся на следующий сценарий оболочки как часть make-файла в u-boot. , что он делает и как она оцениваетсяЧто делает следующий сценарий оболочки

cc-option = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \ 
     > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;) 

это называется

PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,\ 
      $(call cc-option,-malignment-traps,)) 

ответ

3

код выполняет команду if. if принимает один аргумент: команда для выполнения ($(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1).

Если команда выполнена успешно, часть then выполнена (echo "$(1)"). Если команда не выполняется, выполняется команда else (echo "$(2)").

В вашем случае компилятор запускается с некоторыми опциями, которые он может не поддерживать ($1 - -mshort-load-bytes).

С $2 пуст, результатом будет либо опция (если компилятор поддерживает ее), либо пустую строку.

+0

+1, но «если» не является командой. Это ключевое слово в грамматике оболочки. –

+0

@WilliamPursell: Ну, в большинстве оболочек «if» - это встроенная командная оболочка. В руководстве BASH перечислены 'if' в разделе« Compound Commands » –

+0

Семантика« if »действительно описана в этом разделе как ключевое слово для формирования составных команд. Это не команда. –

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