? ? ? ? 大家好,今天主要和大家聊一聊,Linux系統中的Makefile的使用方法。
? ? 當文件有幾十、上百甚至上萬個的時候用終端輸入 GCC 命令的方法顯然是不現實的。如果我們能夠編寫一個文件,這個文件描述了編譯哪些源碼文件、如何編譯那就好了,每次需要編譯工程的時只需要使用這個文件就行了。
? ? 為此提出了一個解決大工程編譯的工具:make,描述哪些文件需要編譯、哪些需要重新編譯的文件就叫做 Makefile,Makefile 就跟腳本文件一樣,Makefile 里面還可以執行系統命令。使用的時候只需要一個 make命令即可完成整個工程的自動編譯。
? ? ?如果是一個小工程的話,例如:main.c、input.c和 calcu.c這三個 C 文件和 input.h、calcu.h 這兩個頭文件。其中 main.c 是主體,input.c 負責接收從鍵盤輸入的數值,calcu.c 進行任意兩個數相加,其中 main.c 文件內容如下:
#include <stdio.h> #include "input.h" #include "calcu.h"?int main(int argc, char *argv[])?int a, b, num;? input_int(&a, &b); num = calcu(a, b);?printf("%d?+?%d?=?%d\r\n",?a,?b,?num);}? ? input.c文件內容如下:
#include <stdio.h>?#include?"input.h"??void?input_int(int?*a,?int?*b)?{?printf("input?two?num:"); scanf("%d?%d",?a,?b);?printf("\r\n");}? ? ?calcu.c文件內容如下:
#include "calcu.h"?int calcu(int a,int b){???return?(a+b);}? ? ?文件input.h 內容如下:
?#ifndef?_INPUT_H?#define?_INPUT_H??void?input_int(int?*a,?int?*b);#endif文件 calcu.h 內容如下:
?#ifndef?_CALCU_H?#define?_CALCU_H??int?calcu(int?a,?int?b);?#endif在終端輸入如下命令:
gcc main.c calcu.c input.c -o main編譯完成以后執行 main 這個程序,測試一下軟件是否工作正常
分析:可以看出我們的代碼按照我們所設想的工作了,使用命令“gcc main.c calcu.c input.c -o main”看起來很簡單是吧,只需要一行就可以完成編譯,但是我們這個工程只有三個文件啊!如果幾千個文件呢?再就是如果有一個文件被修改了以,使用上面的命令編譯的時候所有的文件都會重新編譯。
? ? 在源文件的同級目錄中,添加Makefile文件輸入代碼如下:
main: main.o input.o calcu.o?gcc?-o?main?main.o?input.o?calcu.o?main.o:?main.c?gcc?-c?main.c?input.o:?input.c?gcc?-c?input.c?calcu.o:?calcu.c?gcc?-c?calcu.c?clean:?rm?*.o rm?main上述代碼中所有行首需要空出來的地方一定要使用“TAB”鍵!不要使用空格鍵!這是Makefile 的語法要求,編寫好得 Makefile 如:
Makefile 編寫好以后我們就可以使用 make 命令來編譯我們的工程了,直接在命令行中輸入“make”即可,make 命令會在當前目錄下查找是否存在“Makefile”這個文件,如果存在的話就會按照 Makefile 里面定義的編譯方式進行編譯。
?? ?問題:如果在使用make命令編譯工程的時候提示錯誤?:
解決辦法?:1、Makefile中命令縮進沒有使用TAB鍵?。
? ? ? ? ?2、VI/VIM編輯器使用空格代替了TAB鍵,修改文件/etc/vim/vimrc,在文件最后面加上如下代碼:
set noexpandtab?總結:Makefile里面涉及到的知識還有很多,想要深入學習還需要熟悉語法結構。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
回龍觀郵編多少?北京市昌平區回龍觀村郵政編碼100085北京市昌平區回龍觀醫院宿舍郵政編碼100096北京市昌平區回龍觀鎮南店村郵政編碼100096北京市昌平區回龍觀平靜黃甫村郵政編碼102206北京市昌平區回龍觀鎮北店村郵政編碼102208北京昌平區回龍觀郵編是多少?北京市昌平區回龍觀的郵政編碼是:北京昌平區回龍觀村10085號100096北京市昌平區回龍觀醫院宿舍北京市昌平區回龍觀鎮回龍觀村0...
戴爾筆記本鍵盤燈光怎么循環變色?1.將機械鍵盤插入電腦主機箱或筆記本的USB接口;2.找出機械鍵盤的這兩個鍵。這些是我們機械鍵盤控制燈的按鍵。有些機械鍵盤可能沒有這個花形鍵,所以選擇旁邊的目錄鍵;3.單獨按下這個花形鍵,機械鍵盤就亮了。如果你一直按下去,你會發現鍵盤燈的顏色也在切換。一般按三次燈為一個周期;4.按下的同時打開鍵盤呼吸燈;5.不斷按下它來切換呼吸燈的顏色。dell筆記本鍵盤燈怎么打開...
怎么樣在QQ會員微信平臺上簽到獲得成長值?1.第一次需要關注會員平臺,然后打開會員號登錄并關聯。會員的成長值是不是每天自動增加?是的。只要會員沒有過期,就會自動增加。會員開通后,每日成長值自動接收,號是否登錄對成長值沒有影響。期滿后,增長值不再增加,同樣會損失。如果會員達到2級以上不續約,那么該會員將從2級以上會員降為僅會員,續約會員成長值不會丟失,成長值每天都會增加。騰訊視頻vip成長值怎么獲得...