我不知道......Make和增量構建
當您進行更改爲file1.c
或file2.c
或file1.h
,下面的Makefile重新編譯真實必要的東西(這是好的)
# Link to executable
result: file1.o file2.o
gcc file1.o file2.o -o result23
# Assemble to .o object files
file1.o: file1.s
gcc -c dist/file1.s
file2.o: file2.s
gcc -c dist/file2.s
# Compile to .s assembly files
file1.s: file1.c
gcc -S file1.c
file2.s: file2.c
gcc -S file2.c
當我將構建的對象移動到另一個目錄,但是,無論是否僅更改了一個文件的內容,所有內容都會隨時重建。
# Link to executable
result: file1.o file2.o
gcc file1.o file2.o -o result23
# Assemble to .o object files
file1.o: file1.s
gcc -c dist/file1.s
mv file1.o dist
file2.o: file2.s
gcc -c dist/file2.s
mv file2.o dist
# Compile to .s assembly files
file1.s: file1.c
gcc -S file1.c
mv file1.s dist
file2.s: file2.c
gcc -S file2.c
mv file2.s dist
看來,這種情況正在發生,因爲make
不知道在哪裏.o
文件是在它的環境。
有了這個幾個問題:
- 可以使訪問的環境變量?如果是這樣,你能舉一個例子嗎?
- 當分發目錄與當前目錄不同時,是否可以使增量構建知道?
我認爲你的答案就好。儘管上述makefile的90%是多餘的,並且可以由隱式規則替代。 %.o:%.c gcc $? -o $ @ @ {BUILDIR}/foo:$ {OBJDIR} /bar.o $ {OBJDIR} /bar2.o gcc $^-o $ @ – Alex 2011-12-29 03:32:03
@Alex同意規則可以清理一堆。而對於真正的生產使用依賴應該被使用makedepend或'gcc -MM'等被拉出來,但希望它足以幫助JAM。 – 2011-12-29 03:35:16
我不知道這兩個。 (通常我更喜歡生成的Makefiles又名CMake或Automake) – Alex 2011-12-29 03:38:28