Сделать чувствительность файла в определениях препроцессора - PullRequest
3 голосов
/ 28 ноября 2011

Я написал файл make.

В файле make я использовал переменную, скажем EXTRAFLAGS, которая выглядит следующим образом.

EXTRAFLAGS += -D _MSC_VER
EXTRAFLAGS += -D BINARYINPUT
EXTRAFLAGS += -D ENABLEVERSION2D2

Далее я использую флаги компилятора

CFLAGS = -Werror -Wall -I $(INC) $(EXTRAFLAGS)

и

mingw32-gcc $(CFLAGS) -o nameofexe  OBJ's 

Я использовал этот make-файл без проблем.Но когда я отключаю определения препроцессора, вводя «#» перед одним из операторов в EXTRAFLAGS и переделываю его, я получаю цель в актуальном состоянии.Я не могу ввести Определения препроцессора в чувствительный список.

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

Ответы [ 2 ]

4 голосов
/ 28 ноября 2011

Вы не сделали свой файл .o зависимым от файла Makefile внутри самого файла Makefile.

Когда вы комментируете вещи в / в Makefile, вы ничего не меняете, от чего зависит файл .o - в отличие от редактирования файла .c

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

Например;

  SRC=a.c b.c
  OBJS=a.o b.o
  EXE=ab

  $(EXE): $(OBJS)
       gcc -o $(EXE) $(OBJS) $(...anything-else...)

  $(OBJS): $(SRC) Makefile

( Теперь есть лучшие способы генерации списков .c и .o, но для этого примера должно хватить )

3 голосов
/ 28 ноября 2011

Make - это инструмент, который компилирует ваш проект новым, когда один из ваших файлов в проекте изменяется.

например. когда вы изменяете ваш .h файл, он распознает это изменение и перестраивает все файлы, которые зависят от него, а затем перестраивает все, что зависит от новых сборок, ...

Но когда вы изменяете флаги компилятора и / или определения в make-файле, входные файлы проекта не меняются, поэтому проект не перестраивается.

Есть три способа добиться того, чего вы хотите: сначала вручную выполнить make clean после изменения make-файла. Во-вторых, включить сам make-файл в ваш make-файл (и выпустить там make clean после его изменения). И, наконец, переместите определения в какой-то проект .h файл.

Как правило, только решение "in-ah-file-on-own" является единственным, позволяющим избежать создания всего нового, поскольку другие не знают, какие исходные файлы на самом деле имеют ссылку на измененные определения. .

...