Makefile詳解

来源:https://www.cnblogs.com/zhonglongbo/archive/2018/04/19/8881767.html
-Advertisement-
Play Games

或許很多Winodws 的程式員都不知道這個東西,因為那些Windows 的IDE都為你做了這個工作,但我覺得要作一個好的和 professional 的程式員,makefile 還是要懂。在Linux 下的軟體編譯,你就不能不自己寫makefile 了,會不會寫makefile,從一個側面說明瞭一... ...


原文鏈接:https://blog.csdn.net/qq_38646470/article/details/79917494
專欄鏈接:https://blog.csdn.net/column/details/20028.html

    或許很多Winodws 的程式員都不知道這個東西,因為那些Windows 的IDE都為你做了這個工作,但我覺得要作一個好的和 professional 的程式員,makefile 還是要懂。在Linux 下的軟體編譯,你就不能不自己寫makefile 了,會不會寫makefile,從一個側面說明瞭一個人是否具備完 成大型工程的能力。
    makefile 關係到了整個工程的編譯規則。一個工程中的源文件不計數,其按類型、功能、模塊分別放在若幹個目錄中,makefile 定義了一系 列的規則來指定,哪些文件需要先編譯,哪些文件需要後編譯,哪些文件需要重新編譯,甚至於進行更複雜的功能操作,因為makefile 就像一個Shell 腳本一樣,其中也可以執行操作系統的命令。
    makefile 帶來的好處就是——“自動化編譯”,一旦寫好,只需要一個make 命令,整個工程完全自動編譯,極大的提高了軟體開發的效率。
下麵就來看如何寫Makefile文件:
Makefile文件編寫規範:

目標:依賴文件                               
 $^  代表所有依賴文件
 $@  代表所有目標文件
 $<  代表第一個依賴文件
 %   代表通配符
 @指令:屏蔽指令
定義變數(變數大寫)
變數名=值1 值2 ...
使用變數 $(變數名)

下來看事例:
假設我們有很多個文件(fun1.c fun2.c fun3.c main.h)
假設最後我們就想得到main一個文件
初級版:

.PHONY : clean

main : fun1.o fun2.o fun3.o main.o
    gcc -g fun1.o fun2.o fun3.o main.o -o main
fun1.o : fun1.c main.h
    gcc -Wall -c -g -o fun1.o
fun2.o : fun2.c main.h
    gcc -Wall -c -g -o fun2.o
fun3.o : fun3.c main.h
    gcc -Wall -c -g -o fun3.o

clean :
    rm -rf *.o

精簡版

.PHONY : clean

FM=fun1.o fun2.o fun3.o main.o

main : $(FM)
    (前面一個tab鍵)gcc -g $^ -o $@
%.c : %.o
    (前面一個tab鍵)gcc -c -g - Wall $< -o $@
clean :
    (前面一個tab鍵)rm -rf *.o

看看測試效果:
這裡寫圖片描述
當然Makefile 還有很多其他的用處,如需更深層次瞭解請看makefile深度解析


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 學習ASP.NET Core Razor 編程系列目錄 學習ASP.NET Core Razor 編程系列一 學習ASP.NET Core Razor 編程系列二——添加一個實體 學習ASP.NET Core Razor 編程系列三——創建數據表及創建項目基本頁面 學習ASP.NET Core Ra ...
  • Nginx 基礎篇 1、環境: 系統硬體:CPU =2Core,記憶體 =256M 操作系統:CentOS 7.2 x64 2、環境調試確認: 一、四個確認 1. 確認系統網路 ping www.baidu.com 2. 確認yum可用 yum list 3. 確認關閉iptables規則 iptab ...
  • 在 CentOS 下安裝軟體,可以使用 rpm軟體包、yum工具、自行下載源代碼進行編譯安裝,其中編譯安裝的定製性較高 對於一些在軟體,自行下載源代碼進行編譯安裝較為方便 程式:源代碼 --> 編譯 --> 鏈接 --> 運行 執行編譯安裝步驟: 獲取源代碼並解壓 在解壓完的源代碼目錄下執行 con ...
  • 使用rk3128做為主晶元; 使用andriod5.1-sdk軟體包。 1.在rk3128-86v.dts 中加入頭文件 #include "rk3128-cif-sensor.dtsi" ;加入 : &rk3128_cif_sensor{status = "okay";}; 註意:查找該dts中即 ...
  • 1、下載安裝Redis https://github.com/MicrosoftArchive/redis/releases 可以下載安裝版(.msi)也可以下載解壓版(.zip)。 我直接下載的安裝版,一直下一步,就安裝完成了。 Redis預設埠號為6379,阿裡雲伺服器需要在安全組開放此埠才 ...
  • 一.xdebug安裝 可以先去 你的 php 安裝路徑下的lib 庫目錄看看是否生成了xdebug.so文件,如果生成了就把下麵這些加入 php.ini 文件 二.編輯php.ini文件,加入下麵信息 三.配置PHPSTORM 這裡的debug port要和php.ini裡面的xdebug.remo ...
  • 在命令模式下,輸入:.,$d 回車. ...
  • 用了這麼久mac,發現居然還存在這麼大一個bug。就是如果你曾經編輯mac電腦預設用戶資料,比如試圖改用戶名、試圖改HOME路徑之類的,有很高比率可能導致該用戶喪失管理員許可權。 隨後悲劇就開始了,所有需要管理員許可權認證的地方,比如安裝了一個新軟體,在彈出的認證視窗中,無論如何輸入用戶名和密碼,都無法 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...