先公布解答: 不是XDD
請原諒小妹前一天debug到深夜,突然一陣厭世,發文就比較不生動有趣XDD
前一天介紹了gcc gdb makefile cmake的關係(我是傳送門),接下來會介紹一下makefile的簡單使用方法。
另外補充一點,因為小妹也是最近才開始碰編譯以及C語言的新手,所以,我比較不會教怎麼做專案或是自己提供專案,因為自己也還正在學習,所以我的文章導向會比較像是利用網路上現有的資源,一步一步跟大家導讀,一起學習!
在開始了解之前可以先問問自己下面幾個問題...
上次介紹到gcc的時候有說他是一種編譯器,主要是把人類寫的語言轉換成機器看得動的語言
而MAKE是一種控編譯器的工具,意思就是用來呼叫編譯器,並指定要怎麼編譯的指令工具,例如可以選用各種類型的編譯器,不一定要用gcc之類的。
GNU Make is a tool which controls the generation of executables and other non-source files of a program from the program's source files.
Make - GNU Project - Free Software Foundation
下面這張圖主要用來解釋 .c gcc make 還有 執行檔 之間的關聯
option.1
寫好的.c .cpp --> gcc 直接編譯 ---> 執行檔
option.2
寫好的.c .cpp --> makefile --> 用makefile來控制make --> make 在控制 gcc ---> 執行檔
make會根據makefile裡面的指令動作去執行,Makefile就是一個文字檔,裡面制定各種歸讓make去執行,make再根據makefile的指令控制編譯器(ex: gcc) 要怎麼編譯,大概是這樣的關係,沒有MAKEFILE gcc 也可以跑但就是會有一些隱含的官則比較不可控(例如自動把 a.c
編成 a.o
),但如果要更深入的操控的話就可以用MAKEFILE
當然你可以直接用shell的方法控制,但麻煩,跟MAKE同為編譯控制器的還有
文檔 build.ninja
,常由 CMake/Meson 產生 (之後會再介紹)
MAKE的變體
Python 程式直接呼叫 gcc/clang
大型多語言建置系統
Apple
.c .cpp .cu .h .hpp --> CMake / Meson / GN / Autotools / Premake
--(控制)--> Make / Ninja / MSBuild / xcodebuild...
--(控制)-->compiler ex: gcc/clang.....