разрешить подстановочный знак Makefile% внутри функции оболочки - PullRequest
0 голосов
/ 02 сентября 2010

кажется, что make не разрешает подстановочный знак% перед вызовом функции оболочки, в случаях, подобных этому:

%.exe: $(shell cat %.txt)
    gcc $? -o $@

если я наберу это на оболочке:

$ make test.exe

оболочка жалуется, что не может найти "% .txt", но я ожидал, что она найдет "test.txt".

есть ли способ обойти это?

спасибо!

Ответы [ 4 ]

3 голосов
/ 04 сентября 2010

Вы можете использовать вторичную функцию расширения GNU make:

$ cat Makefile
all : x.exe
.PHONY: all
.SECONDEXPANSION:
%.exe: $$(shell cat $$(basename $$(@F)).txt)
    @echo "$@ depends on $^"

$ cat x.txt 
a
b
c

$ touch a b c

$ make
x.exe depends on a b c
2 голосов
/ 03 сентября 2010

Make foo.txt содержит зависимости для foo.exe в формате Makefile:

foo.exe: foo.o bar.o baz.o

Затем используйте строку include в вашем Makefile:

include foo.txt

Наконец, обновите правило шаблона:

%.exe:
    gcc -o $@ $^
0 голосов
/ 03 сентября 2010

Ну, обычный способ загрузки (динамически генерируемых) зависимостей из внешнего файла - использовать include .Т.е. вы можете исправить свой пример, вы можете просто добавить пункт назначения во время генерации файла% .txt.В Makefile вы можете написать что-то вроде этого:

DEPS = $(OBJS:.o=.txt)

-include $(DEPS)

Кстати, обычно для этих файлов зависимостей обычно используется суффикс% .d.

На следующем веб-сайте показан интеллектуальныйподход к интеграции генерации зависимостей в ваш Makefile. Т.е. файлы зависимостей затем генерируются и обновляются по мере необходимости.Нет необходимости в шаге «сделай deps» или что-то в этом роде.

0 голосов
/ 02 сентября 2010

Я думаю, вы пытаетесь это сделать:

.SUFFIXES: .exe .txt
.txt.exe:
        gcc $? -o $@
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...