я хава Makefile что-то вроде этого:Makefile автоматическая переменная для соответствующего файла Си
outdir = release
allsrc = aaa/a.c bbb/b.c ccc/c.c
allobjs = $(addprefix $(outdir), $(notdir $(allsrc:.c=.o))
...
test: $(allobjs)
$(allobjs): $(allsrc)
gcc -c -o [email protected] $<
тест делают выполняющее:
gcc -c -o release/a.o aaa/a.c
gcc -c -o release/b.o aaa/a.c
gcc -c -o release/c.o aaa/a.c
(автоматическая переменная $ < всегда занимает первое необходимое условие) , но я хочу «соответствующий»:
gcc -c -o release/a.o aaa/a.c
gcc -c -o release/b.o bbb/b.c
gcc -c -o release/c.o ccc/c.c
Что я должен изменить на выполнить желаемый результат?
я знаю, что это будет работать наверняка:
$(outdir)/a.o: aaa/a.c
gcc -c -o [email protected] $<
$(outdir)/b.o: bbb/b.c
gcc -c -o [email protected] $<
$(outdir)/c.o: ccc/c.c
gcc -c -o [email protected] $<
и интересно, как сделать то же самое в одном receipe. (потому что в моем реальном makefile у меня есть ~ 20 различных исходных файлов не только 3, как я сделал здесь, например)
Если вы не будете обращать внимание на дельные советы в ответ Этан в , вы можете поэкспериментировать с '$ *. c'. –