Динамические цели в Makefiles - PullRequest
2 голосов
/ 01 августа 2010

Я пытаюсь создать Makefile, имеющий цель для подпапки src/, чтобы он создавал статическую библиотеку.
Я сейчас пытаюсь это:

%.o: %.cpp
    $(CXX) $(CXXFLAGS) $(INCLUDE) -c -o $@ $<
lib%.a: $(patsubst %.cpp, %.o, $(wildcard src/%/*.cpp))
    $(AR) rcs $@ $^ 

Но это не работает, сопоставление целей работает, но отслеживание зависимостей не работает.
Если я просто оставлю один src/%/*.cpp, который правильно завершает работу с .cpp файлами в соответствующем каталоге, но в тот момент, когда я пытаюсь использовать его внутри строковых функций для преобразования .cpp в .o, % не работает больше.

1 Ответ

2 голосов
/ 03 августа 2010

Это сложно, потому что, насколько я знаю, вы не можете использовать такие функции, как patsubst в списке предварительных требований. Существует несколько способов сделать это; это, пожалуй, наименее уродливо. Сохраните путь в переменной, затем повторно вызовите make, чтобы вы могли создать список предварительных требований вне правила.

ifdef OBJPATH
LIBOBJECTS := $(patsubst %.cc,%.o,$(wildcard src/$(OBJPATH)/*.cc))
lib%.a: $(LIBOBJECTS)
    $(AR) rcs $@ $^
else
lib%.a: src/%/*.cc
    @$(MAKE) -s $@ OBJPATH=$*
endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...