Как добавить разные правила для конкретных файлов? - PullRequest
6 голосов
/ 01 июля 2011

У меня определенная проблема с моим Makefile.

С помощью этой команды я могу скомпилировать все мои * .c файлы в * .o, что хорошо работает:

$(OBJ) : %.o : %.c $(LDSCRIPT) Makefile
    $(CC) $(ARM9_INCLUDES) -c $(CFLAGS) $< -o $@

Но сейчасМне интересно, что, если я хочу запустить -O3 оптимизацию только для ОДНОГО конкретного файла и иметь -O0 для остальных?

Есть ли какая-либо команда для добавления другого правила для определенного файла?

То, что я сейчас делаю, - это компиляция каждого файла C со своими собственными правилами, что очень раздражает, потому что у меня есть около 30 файлов, что делает Makefile огромным , и каждый раз, когда я меняюсьчто-то в одном файле снова компилируется.

Ответы [ 2 ]

13 голосов
/ 01 июля 2011
particular_file.o : CFLAGS+=-O3

(при условии, что GNU make) см. значения переменных для конкретных целей в руководстве по GNU Make (и, возможно, непосредственно следующие значения переменных для шаблонов).

Также обратите внимание,что команды используются из самого конкретного правила для данного файла, поэтому вы можете использовать его в случае, если значение переменной для конкретной цели недостаточно:

particular_file.o : particular_file.c
        completely_special_compiler -o $@ $<

%.o : %.c
        $(CC) $(CFLAGS) -o $@ $<
3 голосов
/ 13 ноября 2013

Возможно сделать решение немного более расширяемым.

Предположим, вам нужно скомпилировать один набор файлов одним способом, а другой набор файлов - другим, а не только одно исключение, и вы можете идентифицировать шаблоны в этих двух наборах файлов, например, один набор начинается с «а», а другой набор начинается с «б», вы можете сделать что-то вроде этого:

a%.o : a%.c
    completely_special_compiler -o $@ $<

b%.o : b%.c
    $(CC) $(CFLAGS) -o $@ $<

Подробнее см. Статические узоры .

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