Как условно включить файл в Makefile? - PullRequest
8 голосов
/ 01 февраля 2011

Рассмотрим следующий Makefile:

# <include global configuration Makefile>

INCL = -I../include \
       -I<whatever>

CPPFLAGS=$(DEFS) $(INCL)
CXXFLAGS = -O0 -g -Wall -fmessage-length=0

SRCS = $(wildcard *.cpp)

OBJS = $(SRCS:.cpp=.o)

all: $(OBJS)

%.o: %.cpp
    $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<


depend: .depend

.depend: $(SRCS) 
    $(CPP) $(CPPFLAGS) -M $^ > $@

clean:
    rm -f $(OBJS)
    rm .depend


-include .depend

Этот Makefile создает цепочку зависимостей #include с помощью команды g++ -M и включает ее.Это может быть довольно длительный процесс.Проблема в том, что этот файл генерируется, даже если вызывается make clean, когда этот файл все равно будет удален.Есть ли способ условно включить этот файл и не создавать его, если запущена чистая цель?

Ответы [ 2 ]

12 голосов
/ 01 февраля 2011

Примерно так:

ifneq ($(MAKECMDGOALS),clean)
-include .depend
endif

См. Страницу руководства make по целям для получения дополнительной информации

Правка: -include не может содержать отступ, иначеигнорируется.

1 голос
/ 14 февраля 2011

Вы можете сделать такие зависимости для бесплатно (т.е. без затрат времени выполнения) во время компиляции.Когда вы запускаете clean, зависимости, естественно, не переделываются.См. Раздел Объединение компиляции и генерации зависимостей в статье Расширенного автозависимости Пола Смита .

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