Имя родительской цели текущей цели в GNU Makefile - PullRequest
0 голосов
/ 11 декабря 2018

Что мне нужно:

all: release debug

release: compile

debug: compile

compile: 
    if parent_target_name = release: 
        $(CXXFLAGS) = for rel
    else: $(CXXFLAGS) = for deb

Проблема: Как проверить имя цели, вызвавшей текущую цель?

Я видел этот вопрос GNU Сделать получение родительского целевого имени , но это не помогло.

1 Ответ

0 голосов
/ 11 декабря 2018

Вероятно, вы ищете Целевые переменные значения .Если вы внимательно прочитаете этот раздел руководства, вы увидите, как они распространяются на предварительные условия.

Просто чтобы проиллюстрировать, как они работают:

.PHONY: all release debug compile

all:
    $(MAKE) release
    $(MAKE) debug

release: CXXFLAGS = for rel
debug: CXXFLAGS = for deb

release debug: compile
    @echo 'building $@ with CXXFLAGS = $(CXXFLAGS)'

compile: a b c
    @echo 'building $@ with CXXFLAGS = $(CXXFLAGS)'

a b c:
    @echo 'building $@ with CXXFLAGS = $(CXXFLAGS)'

Демонстрация:

$ make --no-print-directory all
make release
building a with CXXFLAGS = for rel
building b with CXXFLAGS = for rel
building c with CXXFLAGS = for rel
building compile with CXXFLAGS = for rel
building release with CXXFLAGS = for rel
make debug
building a with CXXFLAGS = for deb
building b with CXXFLAGS = for deb
building c with CXXFLAGS = for deb
building compile with CXXFLAGS = for deb
building debug with CXXFLAGS = for deb
...