Linux開發工具之Makefile(上)

来源:http://www.cnblogs.com/baiyifan/archive/2016/03/15/5278588.html
-Advertisement-
Play Games

二、makefile(上)01.make工具  利用make工具可以自動完成編譯工作。這些工作包括:如果修改了某幾個源文件,則只重裝新編譯這幾個源文件;如果某個頭文件被修改了,則重新編譯所有包含該頭文件的源文件。利用這個自動編譯可大大簡化開發工作,避免不必要的重新編譯。  make工具通過一個稱為M


二、makefile(上)01.make工具  利用make工具可以自動完成編譯工作。這些工作包括:如果修改了某幾個源文件,則只重裝新編譯這幾個源文件;如果某個頭文件被修改了,則重新編譯所有包含該頭文件的源文件。利用這個自動編譯可大大簡化開發工作,避免不必要的重新編譯。  make工具通過一個稱為Makefile的文件來完成並自動維護編譯工作。Makefile文件描述了整個工程的編譯、鏈接等規則。02.Makefile的基本規則:  TARGET...:DEPENDENCIES... COMMAND ...  目標(TARGET)程式產生的文件,如何執行文件和目標文件;目標也可以是要執行的動作,如clean,也成為偽目標。  依賴(DEPENDENCIES)是用來產生目標的輸入文件列表,一個目標通常依賴於多個文件。  命令(command)是make執行的動作(命令是shell命令或是可在shell下執行的程式)。註意:每個命令行的起始字元必須為TAB字元!  如果DEPENDENCIES中有一個或多個文件更新的話,COMMAND就要執行,這就是Makefile最核心的內容#touch main.c add.c sub.c add.h sub.h#lsmain.c add.c sub.c add.h sub.h#vi main.cint main(){ return 0;}#vi Makefilemain:main.o add.o sub.o gcc -Wall -g main.o add.o sub.o -o mainmain.o:main.c gcc -Wall -g -c main.c -o main.oadd.o:add.c add.h gcc -Wall -g -c add.c -o add.osub.o:sub.c sub.h gcc -Wall -g -c sub.c -o sub.o#make(預設生成第一個目標)#lsmain#make(文件沒有變化)make:'main' id up to date#touch sub.h(重新生成sub.h)#makegcc -Wall -g -c sub.c -o sub.ogcc -Wall -g main.o add.o sub.o -o mainclean:(偽目標,並不是要生成的文件,用來刪除這些文件) rm -f main main.o add.o sub.o#make clean將鏈接文件全部刪除#make main.o只生成main.o這個文件.PHONY:clean(Makefile文件的最開頭.表示clean是一個偽目標)如果Makefile所在的文件夾下,存在clean文件,則執行make clean時會提示:make:'clean'is up to date.03.Makefile自動化變數$@:規則的目標文件名$<:規則的第一個依賴文件名$^:規則的所有依賴文件列表#vi Makefile.1.PHONY:cleanOBJECTS=main.o add.o sub.omain:$(OBJECTS) gcc -Wall -g $^ -o [email protected]:main.c gcc -Wall -g -c $< -o [email protected]:add.c add.h gcc -Wall -g -c $< -o [email protected]:sub.c sub.h gcc -Wall -g -c $< -o $@clean: @(加@不會列印在屏幕上)echo "begin delete..."(命令還是要執行) rm -f main $(OBJECTS)#make(正常工作)#make clean(正常工作)#make clean -f Makefile.1(以Makefile.1的規則來執行clean這個命令)begin delete...rm -f main main.o add.o sub.o04.Makefile編譯多個可執行文件  模式規則:%.o:%.c  尾碼規則:.c.o#mkdir 01#mv *.c 01#ls#mv *.* 01#ls01 Makefile#mv Makefile 01#ls#mkdir 02#cd 02#touch 01test.c 02test.c(01test.c,02test.c都要生成可執行文件)#vi 01test.c int main(void){ return 0;}#vi02test.cint main(void){ return 0;}#vi Makefile.PHONY:cleanBIN=01test 02testall:$(bin)01test:01test.o gcc -Wall -g  $^ -o $@02test:02test.o gcc -Wall -g  $^ -o $@clean: rm -f *.o $(BIN)#make01test 02test#vi MakefileBIN依賴兩個文件all這個目標依賴BIN兩個文件編譯器自動將同名的"*.c"文件生成同名可執行文件#makecc 01test.c -o 01testcc 02test.c -o 02test#make clean#ls01test.c 02test.c Makefile#makecc -c -o 01test.o 01test.cgcc -Wall -g -c 01test.o -o 01test#make clean#ls01test.c 02test.c Makefile#vi Makefile%.o:%.c(將對應的.c文件生成.o文件) gcc -Wall -g -c $< -o $@#make clean#make#ls#vi MakefileCC=gccCFLAGS=-Wall -g#%.o:%.c# $(CC) $(CFLAGS) -c $< -o [email protected]: $(CC) $(CFLAGS) -c $< -o $@01test:01test.o $(CC) $(CFLAGS) $^ -o $@02test:02test.o(將游標定位到這裡,輸入2yy,複製兩行) $(CC) $(CFLAGS) $^ -o $@(點擊p,複製到這裡)#make clean#make#ls#vi 03test.cint mian(void){ return 0;}
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 三、gdb調試(上)01.gdb:gdb是GNU debugger的縮寫,是編程調試工作。功能: 啟動程式,可以按照用戶自定義的要求隨心所欲的運行程式; 可讓被調試的程式在用戶所指定的調試的斷點處停住(斷點可以是條件表達式); 當程式停住時,可以檢測此時程式中所發生的事; 動態改變數程式的執行環境。
  • Qt時常發生的錯誤總結 1,代碼有問題,但是它卻告訴你別的地方~比頭文件不能讀取,賊蛋疼! 2,庫文件問題,會出現一大堆錯誤,這個時候就要好好檢查庫文件了。 3,版本問題,Qt版本升級時有些東西會變化,所以要及其註意你寫的代碼不一定在這種版本上好使,到另一版本上就行!
  • 一、RPM包校驗 [root@localhost Packages]# rpm -V 已安裝的包名 #選項: #-V校驗指定RPM包中的文件(verify) [root@localhost Packages]# vim /etc/httpd/conf/httpd.conf---> 對包的配置文件進行...
  • rror:Flash Download Failed-"Cortex-M3"出現一般有兩種情況:   1.SWD模式下,Debug菜單中,Reset菜單選項(Autodetect/HWreset/sysresetReq/Vectreset)預設是AutoDetect,改成SysResetReq即可。
  • 之前一直嘗試使用“橋接”的方法,但是一打開虛擬機,本機windows就斷網。最後不得不換種方法,還好嘗試了很多遍終於使用NAT設置成功的聯網了。 說明:本機windows連接的是無線網。 1.檢查自己的windows系統的VMware DHCP Service 和 VMware NAT Servic
  • 裝載系統的時候只開啟了22埠。結果再裝完Nginx+php+mysql 後不能訪問網站。 iptables -L -n 查看防火牆設置發現沒開啟80埠 由於Linux防火牆預設是關閉的。可以用兩種方式,一個是關閉防火牆,另一個就是讓防火牆開放這個埠。 關閉防火牆命名: service ipta
  • 二、Makefile(下)01.make常用內嵌函數函數調用  $(function arguments)$(wildcard PATTERN)  當前目錄下匹配模式的文件  例如:src=$(wildcard *.c)$(patsubst PATTERN,REPLACEMENT,TEXT)  模式
  • 鑒於前段時間系統出了點問題,然後直接將盤抹了,來個徹底乾凈的系統重裝。這裡敲下過程。(網路恢復太慢了,我整整一個晚上竟然沒down下來,惱怒了,直接U盤裝) First,系統盤製作: 1.首先需要有:一個不小於8G的U盤,運行OS X 系統的電腦(U盤最好先使用磁碟工具進行抹盤,格式選擇OS 擴展(
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...