Makefile詳解-創(chuàng)新互聯(lián)

文章目錄
    • 1.什么是Makefile
    • 2.Makefile文件命名規(guī)則
    • 3.編寫Makefile
    • 4.Makefile 的工作原理
    • 5.Makefile中的變量
    • 6.模式匹配
    • 7.函數(shù)

創(chuàng)新互聯(lián)從2013年成立,先為昌江等服務(wù)建站,昌江等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為昌江企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
1.什么是Makefile
  • 一個(gè)工程中的源文件不計(jì)其數(shù),按期類型、功能、模塊分別放在若干個(gè)文件中,MakeFile文件定義了一系列的規(guī)則來制定哪些文件需先要編譯、哪些文案需要后編譯、哪些文件需要重新編譯、甚至于進(jìn)行更加復(fù)雜的操作,因?yàn)镸akefile文件就像是一個(gè)shell腳本一樣,也可以執(zhí)行操作系統(tǒng)的命令

  • Makefile 帶來的好處就是 自動(dòng)化編譯,一旦寫好,只需要一個(gè)make命令,整個(gè)工程完全自動(dòng)化編譯,極大提高了軟件開發(fā)效率,make是一個(gè)命令工具,是一個(gè)解釋Makefile文件中指令的命令工具,一般來說,大多數(shù)的IDE都有這個(gè)命令,例如Delphi的make、Visual C++的nmaek、Linux下Gun的make。

2.Makefile文件命名規(guī)則
  • 文件命名:Makefile或者makefile
  • makefile規(guī)則
    • 一個(gè)Makefile文件中可以有一個(gè)或者多個(gè)命名規(guī)則
      目標(biāo)… : 依賴 …
      命令(shell命令)
      • 目標(biāo):最終要生成的文件
      • 依賴:生成目標(biāo)所需要的文件或者目標(biāo)
      • 命令:通過執(zhí)行命令對依賴金慈寧宮操作從而生成目標(biāo)(命令前必須tab縮進(jìn))
  • Makefile中的其他規(guī)則一般都是為第一條規(guī)則服務(wù)的
3.編寫Makefile
  1. 創(chuàng)建Makefile文件
vim Makefile
  • 編輯Makefile文件,行其中編寫編譯命令
app:add.cpp div.cpp mutil.cpp subtract.cpp
        gcc -lstdc++  add.cpp div.cpp mutil.cpp subtract.cpp main.cpp  -o app

在這里插入圖片描述

  • 執(zhí)行編譯后的程序
    在這里插入圖片描述
4.Makefile 的工作原理
  • 執(zhí)行命令之前需先檢查規(guī)則中的依賴是否存在
    • 如果存在,執(zhí)行命令
    • 如果不存在,向下檢查其他規(guī)則,檢查有沒有一個(gè)規(guī)則是用來生成這個(gè)依賴的,如果找到了則執(zhí)行改規(guī)則中的命令
  • 檢測更新
    • 如果依賴的時(shí)間比目標(biāo)的時(shí)間晚,則需要重新生成目標(biāo)
    • 如果依賴的時(shí)間比目標(biāo)的時(shí)間早,目標(biāo)不需要更新,對應(yīng)規(guī)則中的目標(biāo)不需要執(zhí)行。

在這里插入圖片描述
Makefile

app:add.o div.o mutil.o subtract.o main.o
        gcc -lstdc++  add.o div.o mutil.o subtract.o main.o  -o app

add.o:add.cpp
        gcc -c add.cpp -o add.o
div.o:div.cpp
        gcc -c div.cpp -o div.o
mutil.o:mutil.cpp
        gcc -c mutil.cpp -o mutil.o
subtract.o:subtract.cpp
        gcc -c subtract.cpp -o subtract.o
main.o:main.cpp
        gcc -c main.cpp -o main.o
5.Makefile中的變量
  • 自定義變量
    變量名 = 變量值 var = hello 獲取變量:$var

  • 預(yù)定義變量
    AR:歸檔維護(hù)程序的名稱,默認(rèn)為ar
    CC:c編譯器的名稱,morenwcc
    CXX:C++b編譯器的名稱,默認(rèn)為g++
    $@:目標(biāo)的完整名稱
    $<:第一個(gè)依賴文件的名稱
    $^:所有依賴文件

  • 獲取變量的值
    $()變量名
    自動(dòng)變量只能在規(guī)則的命令中使用

app:main.c  a.c  b.c
	$(CC) -c $^ -o  $@

示例:

#定義變量
src=add.o div.o mutil.o subtract.o main.o
target=app
$(target):$(src)
        $(CC) -lstdc++ $(src) -o $(target)

add.o:add.cpp
        gcc -c add.cpp -o add.o

div.o:div.cpp
        gcc -c div.cpp -o div.o
mutil.o:mutil.cpp
        gcc -c mutil.cpp -o mutil.o
subtract.o:subtract.cpp
        gcc -c subtract.cpp -o subtract.o
main.o:main.cpp
        gcc -c main.cpp -o main.o
6.模式匹配

%.o:%.c
%:通配符,匹配一個(gè)字符串
兩個(gè)%之間匹配的是同一個(gè)字符串

在這里插入圖片描述

#定義變量
src=add.o div.o mutil.o subtract.o main.o
target=app
$(target):$(src)
        $(CC) -lstdc++ $(src) -o $(target)

#通配指令
%.o:%.c
        $(CC) -c $< -o $@
7.函數(shù)
  • $(wildcard PATTERN…)

    • 功能:獲取指定目錄下指定類型的文件列表
    • 參數(shù): PATTERN指的是某個(gè)或者多個(gè)路徑下對應(yīng)的某種類型的文件,如果有多個(gè)目錄,一般使用空格來間隔
    • 返回:得到若干個(gè)文件的文件列表,文件名之間用空格來間隔
    • 示例:
      $(wildcard.c ./sub/.c)
      返回格式:a.c b.c c.c d.c e.c
  • $(patsubst pattern, replacement,text)

    • 功能:查找 中的單詞(單詞以“空格”、“Tab”、或者“回車”、“換行”分割)是否符合模式,如果匹配的話,用進(jìn)行替換
    • 可以包括通配“%”,標(biāo)識(shí)任意長度的字符串,如果 中也包含“%”,那么 中的“%”就是中的“%”所代表的的字符串
    • 返回:函數(shù)返回被替換過的字符串
      $(patsubst %.c, %.o,x.c bar.c)
      返回格式:x.o bar.o
      在這里插入圖片描述

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

分享名稱:Makefile詳解-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://www.muchs.cn/article18/hgsdp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)軟件開發(fā)、網(wǎng)站制作定制網(wǎng)站、云服務(wù)器定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)