내 프로젝트 (해석 된 언어)는 여러 파일로 구성된 표준 라이브러리를 가지며, 각각은 인터프리터가 사용자 요청에 따라로드하는 .so 동적 라이브러리로 빌드됩니다 (import 지시문). 각 소스 파일은 예를 들어, 자사의 "네임 스페이스"를 나타내는 서브 디렉토리에 위치합니다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 - 소스를 가진 모든 빌드 디렉토리를 배포하지 않고도 "깔끔한"방법으로이 작업을 수행 할 수있는 방법은 무엇입니까?/something.so 규칙의 대상 (다음 stdlib)이 규칙은() something.so/구축, 그래서 항상해야합니다 생각 확인하게 정확히 아니라고
감사
경우 1