AC>> Задача стояла построить _зависящую_ цель (пакет) при измениях в AC>> исходных файлах _зависимых_ целей (конкретные программы). Эта AC>> задача решена.
> Задача подразумевала некоторую вполне конкретную раскладку по > директориям. А не как понравится тебе. Извини подвинься. Вот уж каталоги я будут делать так, как удобно мне :) В идеологии mk scripts: один проект (екзешник или библиотека) - один каталог. Можно сделать как угодно, но оно того не стоит. И это ОЧЕНЬ удобно. > Но я не вижу, как твое решение масштабируется на реальную жизнь, > когда надо будет в A получить актуальным не все, а только конкретный > бинарник, когда в B изменился один исходник. Про каталоги - смотри выше. А масштабируется все прекрасно - дописыванием зависимостей между _проектами_, то есть фактически нужно задать граф зависимостей, повторюсь, между проектами. Реальный небольшой пример, в котором 1) dictd/dict/dictfmt/dictzip независимы 2) libmaa и dict_common независимы 1) dictd/dict/dictfmt/dictzip линкуются с libmaa и dict_common ./Makefile: .PHONY: dict dictd dictfmt dictzip dict dictd dictfmt dictzip: SUBDIR="libmaa dict_common .WAIT $@" $(MAKE) all .include <bsd.subdir.mk> Для ОЧЕНЬ больших вот таких вот графов естественно пишется отдельный подмодуль, который будет этот граф строить автоматом. Более строго: по графу, заданному списком ребер (проект A зависит от проекта B), нужно найти для заданной вершины (проекта) все проекты, от которых он зависит (сущестсвует путь от ... до заданной вершины), затем дернуть $(MAKE) all с нужным SUBDIR. Как это работает. 0 dictd_bsd_make>bmake dictd SUBDIR="libmaa dict_common dictd" /usr/pkg/bin/bmake all all ===> libmaa all ===> dict_common all ===> dictd 0 dictd_bsd_make>touch libmaa/1.c 0 dictd_bsd_make>bmake dictfmt SUBDIR="libmaa dict_common dictfmt" /usr/pkg/bin/bmake all all ===> libmaa gcc -O2 -Werror -c 1.c gcc -O2 -Werror -c -pg 1.c -o 1.po gcc -O2 -Werror -c -fPIC -DPIC 1.c -o 1.so building standard maa library ar cq libmaa.a 1.o 2.o 3.o ranlib libmaa.a building profiled maa library ar cq libmaa_p.a 1.po 2.po 3.po ranlib libmaa_p.a building shared object maa library ar cq libmaa_pic.a 1.so 2.so 3.so ranlib libmaa_pic.a building shared maa library (version 2.0.3) ld -shared -soname libmaa.so.2 -o libmaa.so.2.0.3 --whole-archive libmaa_pic.a --no-whole-archive ln -sf libmaa.so.2.0.3 libmaa.so.2.tmp mv -f libmaa.so.2.tmp libmaa.so.2 ln -sf libmaa.so.2.0.3 libmaa.so.tmp mv -f libmaa.so.tmp libmaa.so all ===> dict_common all ===> dictfmt gcc -L../dict_common -L../libmaa -o dictfmt dictfmt.o -ldict_common -lmaa 0 dictd_bsd_make>bmake dictfmt SUBDIR="libmaa dict_common dictfmt" /usr/pkg/bin/bmake all all ===> libmaa all ===> dict_common all ===> dictfmt 0 dictd_bsd_make>touch dict_common/3.c 0 dictd_bsd_make>bmake dict SUBDIR="libmaa dict_common dict" /usr/pkg/bin/bmake all all ===> libmaa all ===> dict_common gcc -O2 -Werror -c 3.c gcc -O2 -Werror -c -pg 3.c -o 3.po building standard dict_common library ar cq libdict_common.a 1.o 2.o 3.o ranlib libdict_common.a building profiled dict_common library ar cq libdict_common_p.a 1.po 2.po 3.po ranlib libdict_common_p.a all ===> dict gcc -L../dict_common -L../libmaa -o dict dict.o -ldict_common -lmaa 0 dictd_bsd_make> > То есть, задачу ты не решил ни формально, ни фактически. По разным > причинам, но не решил. Если ты АБСОЛЮТНО уверен в том, что ты Д'Артаньян, а остальные все пианисты, и в том, что make твою задачу решить не в состоянии, тогда нечего задавать вопросы публично. Можешь пребывать в своем неведении и дальше. Мне от этого ни холодно ни жарко. Третий раз я повторять не стану. P.S. Для демонстрации собственно лаконичности и простоты. libmaa/Makefile (и это собственно все, что нужно для .so): LIB= maa SRCS= 1.c 2.c 3.c # etc. SHLIB_MAJOR= 2 SHLIB_MINOR= 0 SHLIB_TEENY= 3 .include <bsd.lib.mk> dict_common/Makefile (статическая либа): LIB= dict_common SRCS= 1.c 2.c 3.c # etc. MKPIC= no # we build static library .include <bsd.lib.mk> dict/Makefile (требует libmaa и статическую dict_common): PROG= dict .include "../dict_common/Makefile.inc" .include "../libmaa/Makefile.inc" .include <bsd.prog.mk> dict_common/Makefile.inc: LDFLAGS+= -L../dict_common LDADD+= -ldict_common DPADD+= ../dict_common/libdict_common.a -- Best regards, Aleksey Cheusov. -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]