的
生成文件構建hello
可執行如果改變的main.cpp
,hello.cpp
,factorial.cpp
任何一個。儘可能小的Makefile來實現這一規範可能是:
hello: main.cpp hello.cpp factorial.cpp
g++ -o hello main.cpp hello.cpp factorial.cpp
- 親:很容易閱讀
- CON:維護的噩夢,在C++依賴的重複
- CON:效率問題,我們重新編譯所有C++即使只有一個被更改
爲了改進上述內容,我們只編譯那些被編輯的C++文件。然後,我們只需將生成的目標文件鏈接在一起。
OBJECTS=main.o hello.o factorial.o
hello: $(OBJECTS)
g++ -o hello $(OBJECTS)
main.o: main.cpp
g++ -c main.cpp
hello.o: hello.cpp
g++ -c hello.cpp
factorial.o: factorial.cpp
g++ -c factorial.cpp
- 親:修復效率的問題
- CON:新的維護的噩夢,在目標文件規則的潛在錯字
爲了改善這一點,我們可以用一個替換所有目標文件的規則.cpp.o
規則:
OBJECTS=main.o hello.o factorial.o
hello: $(OBJECTS)
g++ -o hello $(OBJECTS)
.cpp.o:
g++ -c $< -o [email protected]
這裏.cpp.o
規則定義如何建立從anyfile.cpp
anyfile.o
。
存在於生成文件的其他變化有:
- 使其更容易從克++到任何C++編譯器的編譯器的變化。
- 更容易更改編譯器選項。
- 更易於更改鏈接器選項。
- 更容易更改C++源文件和輸出。
- 添加默認規則'all',作爲快速檢查以確保在嘗試構建應用程序之前存在所有源文件。
上面的鏈接被打破,這是另一個:http://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html – asciz 2013-01-26 01:12:43
嗨這是什麼「.cpp.o :「作爲目標是什麼意思? (在最後一行?)。 – 2013-07-02 06:47:39
「.cpp.o:」意思是從「.cpp」(源文件)構建「.o」(目標文件) – jaguzu 2013-09-13 06:30:17