Передача аргумента командной строки в качестве цели в Makefile - PullRequest
3 голосов
/ 02 февраля 2012

Чтобы упростить мой вопрос, если у меня есть Makefile, как показано ниже

    %: %.c
           gcc -o $@ $<

    make foo

Make foo создаст исполняемый файл foo из foo.c.Без вопросов.Если бы я изменил Makefile, как показано ниже, чтобы я мог передать цель из командной строки Makefile

    # To make things little complex
    TARG=$(EXE)
    $(TARG): %.c
            gcc -o $@ $<

    make EXE=foo

Приведенная выше команда make EXE=foo говорит:

"make: *** No rule to make target %.c, needed by Foo».Стоп.

Почему $(TARG) не расширяется в правиле target в Makefile?

Ответы [ 2 ]

2 голосов
/ 02 февраля 2012

Я думаю, вам нужно Правило статического шаблона

TARG=$(EXE)

$(TARG):%: %.c
  gcc -o $@ $<

make EXE=foo
1 голос
/ 02 февраля 2012

Просто оставьте код из вашего первого примера и добавьте следующую строку:

.DEFAULT_GOAL := $(EXE)

Или (что по сути то же самое) добавьте правило $(EXE) : без рецепта перед любыми другими правилами.По умолчанию Make выбирает первую цель, определенную в Makefile, если в командной строке ничего не указано.

...