Mój projekt (język interpretowany) ma standardową bibliotekę złożoną z wielu plików, każdy z nich będzie wbudowany w bibliotekę dynamiczną .so, którą interpreter załaduje na żądanie użytkownika (z dyrektywa importowa). Każdy plik źródłowy znajduje się w podkatalogu reprezentującego jego „nazw”, na przykład:Makefile: Utwórz w osobnym drzewie katalogów
proces libraries tree http://img707.imageshack.us/img707/7299/screenshot1tv.png
Build musi utworzyć katalog „budować”, a następnie, gdy każdy plik jest kompilacji musi stworzyć swoją nazw katalog wewnątrz "build" jednego, na przykład, podczas kompilowania
std/io/network/tcp.cc
on uruchomić komendę mkdir z
mkdir -p build/std/io/network
Makefile fragment brzmi:
STDSRC=stdlib/std/hashing/md5.cc \
stdlib/std/hashing/crc32.cc \
stdlib/std/hashing/sha1.cc \
stdlib/std/hashing/sha2.cc \
stdlib/std/io/network/http.cc \
stdlib/std/io/network/tcp.cc \
stdlib/std/io/network/smtp.cc \
stdlib/std/io/file.cc \
stdlib/std/io/console.cc \
stdlib/std/io/xml.cc \
stdlib/std/type/reflection.cc \
stdlib/std/type/string.cc \
stdlib/std/type/matrix.cc \
stdlib/std/type/array.cc \
stdlib/std/type/map.cc \
stdlib/std/type/type.cc \
stdlib/std/type/binary.cc \
stdlib/std/encoding.cc \
stdlib/std/os/dll.cc \
stdlib/std/os/time.cc \
stdlib/std/os/threads.cc \
stdlib/std/os/process.cc \
stdlib/std/pcre.cc \
stdlib/std/math.cc
STDOBJ=$(STDSRC:.cc=.so)
all: stdlib
stdlib: $(STDOBJ)
.cc.so:
mkdir -p `dirname $< | sed -e 's/stdlib/stdlib\/build/'`
$(CXX) $< -o `dirname $< | sed -e 's/stdlib/stdlib\/build/'`/`basename $< .cc`.so $(CFLAGS) $(LDFLAGS)
Mam dwa pytania:
1 - Problem polega na tym, że polecenie make, ja naprawdę nie wiem dlaczego, nie sprawdza, czy plik został zmodyfikowany i uruchomić proces budowania na wszystkich plików bez względu na to, więc jeśli trzeba zbudować tylko jeden plik, mam je wszystkie zbudować lub użyć polecenia:
make path/to/single/file.so
Czy istnieje jakiś sposób, aby rozwiązać ten problem?
2 - Czy można to zrobić w "czystszy" sposób, bez konieczności rozprowadzania wszystkich katalogów kompilacji za pomocą źródeł?
Dzięki