我的項目(一種解釋型語言)有一個由多個文件組成的標準庫,它們中的每一個都將被構建到.so動態庫中,解釋器將根據用戶請求加載導入指令)。 每個源文件所在爲代表的「命名空間」的子目錄,例如:Makefile:構建在一個單獨的目錄樹中
libraries tree http://img707.imageshack.us/img707/7299/screenshot1tv.png
構建過程必須創建一個「構建」目錄,然後在每個文件進行編譯,創建命名空間編譯
std/io/network/tcp.cc
當 「打造」 一個,例如,目錄裏面運行,他用mkdir命令
mkdir -p build/std/io/network
Makefile的片段是:
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)
我有兩個問題:
1 - 問題是,make命令,我真的不知道爲什麼,不檢查文件是否被修改並啓動構建過程中的所有文件,不管是什麼,所以,如果我需要建立只有一個文件,我要建立他們所有或使用命令:
make path/to/single/file.so
有什麼辦法解決?
2 - 任何方式以「清潔」的方式做到這一點,而不必分配所有的源代碼的目錄?
感謝