2015-06-04 3 views
2

Я не могу понять следующий фрагмент кода из make-файла собственной разработки Contiki-os.Невозможно понять этот фрагмент кода в make-файле

NM  ?= nm 
OBJCOPY ?= objcopy 
STRIP ?= strip 
ifdef WERROR 
CFLAGSWERROR=-Werror -pedantic -std=c99 -Werror 
endif 
CFLAGSNO = -Wall -g -I/usr/local/include $(CFLAGSWERROR) 
CFLAGS += $(CFLAGSNO) -O 

Источник: https://github.com/contiki-os/contiki/blob/master/cpu/native/Makefile.native#L13-20

Это не переменные задания, которые я не понимаю, мои вопросы является то, что «WERROR» и как он связан с «CFLAGS» и что НМ относится? CC ссылается на компилятор LD на компоновщик.

Было бы здорово, если бы кто-то мог мне помочь.

+0

Что вы точно не понимаете? Может быть, http://stackoverflow.com/questions/448910/makefile-variable-assignment. – FPK

+0

Это не переменные назначения, мои вопросы - это то, что есть «WERROR», и как это связано с «CFLAGS» и к чему относится NM? CC ссылается на компилятор LD на компоновщик. – DarthSpeedious

ответ

1

Если WERROR определен, файл make добавляет параметры в компиляцию, так что предупреждения обрабатываются как ошибки. Предположительно, что-то в какой-то момент определит WERROR = 1, инициирующий эту строгую сборку. CFLAGS будет использоваться в правиле, которое компилирует исходный код в код объекта.

От: http://www.chemie.fu-berlin.de/chemnet/use/info/make/make_7.html

Компиляция программы C:

n.o производится автоматически из n.c с рецептом вида «$ (CC) $ (CPPFLAGS) $ (CFLAGS) -c».

+0

Что это значит: 'CFLAGSWERROR = -Werror -pedantic -std = c99 -Werror' делать? – DarthSpeedious

+0

Вам нужно будет проверить ссылку на компилятор для специфики, но предположительно -Werror говорит компилятору рассматривать предупреждения как ошибки. -pedantic, говорящий, что это педантичный, -std = c99 говорит, что он компилируется в стандарт c99, а дополнительный -Werror, вероятно, является ошибкой. Эти флаги расширяются в CFLAGSNO, если они определены, которые, в свою очередь, расширяются в CFLAGS, который используется в правиле компиляции по умолчанию, выполняемом make. –