簡易Makefile教學
1.使用Makefile的原因以及 Compile 過程
簡單來說的話makefile就是一個把你要終端機執行的程序預先設置好讓終端機批次處理的檔案。
好比我今天要將 (cpp檔案 >> 執行檔執行) 這個過程,如果直接在終端機輸入指令的話會有:
1 2 3
| g++ -c main.cpp g++ -o file main.o file.exe
|
這三個指令,如果每次修改了程式後就要重新complier,那也就代表要重新輸入指令這對整個工作過程可以說是相當浪費時間的。因此使用makefile去節省這部分的時間是對整個程式開發過程極為重要的一件事!!
在開始簡易指令的介紹前我們先搞懂前面三個指令的用意!
-c 會將cpp檔案編譯成obj檔,也就是xxx.o 裏面包含了將程式轉換成執行檔時的重要資訊,通常直接打開會長的向下面這樣。
1 2 3 4 5 6 7 8 9 10 11 12
| 7f45 4c46 0201 0100 0000 0000 0000 0000 0100 3e00 0100 0000 0000 0000 0000 0000 0000 0000 0000 0000 4840 0000 0000 0000 0000 0000 4000 0000 0000 4000 2801 2501 0100 0000 6600 0000 0100 0000 6800 0000 6a00 0000 0100 0000 6d00 0000 6f00 0000 0100 0000 7000 0000 7200 0000 0100 0000 7300 0000 7500 0000 0100 0000 7600 0000 7800 0000 0100 0000 7900 0000 0100 0000 7b00 0000 7d00 0000 0100 0000 7e00 0000 8000 0000 0100 0000 8100 0000 0100 0000 8300 0000 8500 0000 0100 0000 8600 0000
|
接著透過-o這個指令將所有的obj link再一起編譯成執行檔。在windows下就是.exe的執行檔,在linux下就是binery file
2.範例以及簡易指令
Windows
1 2 3 4 5 6 7 8 9 10 11 12
| ALL:main exe clean main: main.o @g++ -o hw1 main.o main.o: main.cpp @g++ -std=c++0x -c main.cpp exe: @hw1.exe clean: @del *.o @del hw1.exe
|
Linux(指令是相對的,只是指令格式上有所不同)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| ALL: clean1 main exes clean clean1: @rm *.o main: main.o @g++ -o exe main.o parser.o run.o main.o: main.cpp @g++ -std=c++11 -c -O3 main.cpp parser.cpp run.cpp exes: @./exe data/case0 data/case0_s clean: @rm *.o @rm exe @g++ -c main.cpp
|
3. Hello World!!
開一個新文字檔將以下內容儲存並將附檔名改成.cpp
1 2 3 4 5 6
| #include <iostream> int main() { std::cout<< "Hello World!! <<endl; return 0; }
|
再開一個新文字檔並將檔名命名為Makefile但不要有附檔名
1 2 3 4 5 6 7 8 9 10
| ALL:main exe clean main: main.o @g++ -o file main.o main.o: main.cpp @g++-c main.cpp exe: @file.exe clean: @del *.o @del hw1.exe
|
接著將終端機路徑切至放置此兩檔案的資料夾內並在指令欄中打入make
Hello World!!
就會出現在終端機螢幕上啦!!
以上都只是相對簡易的教學,如果有興趣的話可以自己搜尋 gnu make 或者參考以下超連結。
於鳳昌翻譯版
⬅️ Go back