Я знаю, что рекурсивное создание считается злом, и т. Д. Пожалуйста, потерпите меня в любом случае.
Мы управляем относительно крупным проектом с помощью GNU make, в котором интенсивно используются включения make для упрощения отдельных файлов make.Я хотел бы добавить цель, которая выполняется после другой цели.Точнее говоря, проблема в следующем:
У меня есть такой Makefile:
PROJ_SRC = a.cpp b.cpp
PROJ_LIB = ab
PROJ_SUBDIRS = x/ y/ z/
PROJ_EXAMPLES = example/
Я хотел бы сначала вызвать make в подкаталогах x, y, z, а затем собратьlib в самом PWD, и только затем перейдите в подкаталог 'example', чтобы построить примеры с использованием этой библиотеки.
Все, кроме бита примера, работает нормально, но я не могу обернуть голову вокруг чистого решения для этогопоследний битВот что я попробовал:
# works ok for the target 'all', but nothing else
all: subdirs ... $(PROJ_OBJ) $(PROJ_LIB_FULL) ... $(PROJ_EXAMPLES)
# ugly, needs to be adde on all targets, and runs into examples
# repeatedly if multiple targets get invoked.
full_lib:: $(PROJ_LIB_FULL)
$(PROJ_LIB_FULL):: subdirs
$(CXX) ...
ifdef PROJ_EXAMPLES
$(MAKE) -C $(PROJ_EXAMPLES)
endif
# this does not make sense, as it builds the lib even on 'make clean' etc
$(PROJ_EXAMPLES):: full_lib
Есть идеи, как это обобщить?
PS: извините, если приведенные выше фрагменты не являются на 100% чистым синтаксисом - они просто должныпроиллюстрировать проблему ...