Есть еще одна опция, не упомянутая здесь, которая включена в книгу GNU Make Сталмана и МакГрата (см. http://www.chemie.fu -berlin.de / chemnet / use / info / make / make_7.html ). Это обеспечивает пример:
archive.a: ...
ifneq (,$(findstring t,$(MAKEFLAGS)))
+touch archive.a
+ranlib -t archive.a
else
ranlib archive.a
endif
Включает проверку, присутствует ли данный параметр в MAKEFLAGS
. Например ... предположим, что вы изучаете потоки в c ++ 11, и вы поделили свое исследование на несколько файлов (class01
, ..., classNM
) и хотите: скомпилировать, затем все и запустить по отдельности или скомпилируйте по одному и запустите его, если указан флаг (например, -r
). Итак, вы можете придумать следующее Makefile
:
CXX=clang++-3.5
CXXFLAGS = -Wall -Werror -std=c++11
LDLIBS = -lpthread
SOURCES = class01 class02 class03
%: %.cxx
$(CXX) $(CXXFLAGS) -o $@.out $^ $(LDLIBS)
ifneq (,$(findstring r, $(MAKEFLAGS)))
./$@.out
endif
all: $(SOURCES)
.PHONY: clean
clean:
find . -name "*.out" -delete
Имея это, вы бы:
- построить и запустить файл w /
make -r class02
;
- построить все с /
make
или make all
;
- собрать и запустить все с /
make -r
(предположим, что все они содержат какой-то определенный тип утверждений, и вы просто хотите проверить их все)