GNU make: собрать все исходники в другой каталог - PullRequest
4 голосов
/ 25 апреля 2011

Дано:

programs := apps/prog1 apps/prog2        # the actual list is quite long
sources := src/prog1.cpp src/prog2.cpp   # showing only 2 files

Файл Make имеет 2 цели release и debug. Каждая цель должна собрать каждую программу в каталоге bin/ и добавить имя цели к имени файла.

Например, здание release должно создать bin/prog1_release и bin/prog2_release.

Как написать статическое шаблонное правило, чтобы сделать это?

Спасибо.

1 Ответ

3 голосов
/ 25 апреля 2011

Это будет сделано (в GNUMake 3.81):

BINS := $(patsubst apps/%,bin/%,$(programs))   # bin/prog1 bin/prog2 ...
release_bins := $(addsuffix _release,$(BINS))  # bin/prog1_release ...
debug_bins := $(addsuffix _debug,$(BINS))      # bin/prog1_debug ...

$(release_bins): bin/%_release: src/%.cpp
    #build the binaries according to the release rule

$(debug_bins): bin/%_debug: src/%.cpp
    #build the binaries according to the debug rule

release: $(release_bins)

debug: $(debug_bins)

.PHONY: release debug

# If it turns out that one of the progs needs something else too:
bin/prog20_debug: somethingElse.cpp

(Есть способы сделать это немного более кратким, но ценой ясности.)

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