日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

C++ Makefile文件详解

發(fā)布時(shí)間:2023/12/13 c/c++ 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ Makefile文件详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么是Makefile文件

  • 一個(gè)工程,源文件不計(jì)其數(shù),按照類型、功能、模塊分別放在對(duì)應(yīng)的若干個(gè)目錄中
  • Makefile定義了一系列的規(guī)則,比如定義文件編譯的先后順序。類似shell腳本,也可以執(zhí)行操作系統(tǒng)的命令
  • Makefile帶來(lái)的好處是自動(dòng)化編譯
  • 文件的命名 makefile 或者 Makefile
  • Makefile規(guī)則 :其可以定義一個(gè)或者多個(gè) 規(guī)則
  • 目標(biāo) ... :? 依賴? ...
    • 命令 (shell 命令)
  • 目標(biāo):最終要生成的文件 (偽目標(biāo)除外)
  • 依賴:生成目標(biāo)所需要的文件或者是目標(biāo)
  • 命令:通過執(zhí)行命令對(duì)依賴生成目標(biāo) (命令之前使用 Tab進(jìn)行縮進(jìn))

工作原理

  • 命令在執(zhí)行之前,需要檢查規(guī)則中依賴是否存在
    • 如果存在:執(zhí)行命令
    • 如果不存在:向下檢查其他的規(guī)則,檢查有沒有一個(gè)規(guī)則是用來(lái)生成這個(gè)依賴的,如果找到,就執(zhí)行規(guī)則中的命令
  • 檢測(cè)更新,在執(zhí)行規(guī)則中的命令時(shí),會(huì)比較目標(biāo)和依賴文件的時(shí)間
    • 如果依賴的時(shí)間比目標(biāo)時(shí)間晚,需要重新生成目標(biāo)
    • 如果依賴的時(shí)間比目標(biāo)時(shí)間早,目標(biāo)不需要更新,對(duì)應(yīng)規(guī)則中的命令不需要被執(zhí)行
app:sub.o add.o mult.o main.ogcc sub.o add.o mult.o main.osub.o:sub.cgcc -c sub.c -o sub.oadd.o:add.cgcc -c add.c -o add.omult.o:mult.cgcc -c mult.c -o mult.omain.o:main.cgcc -c main.c -o main.o

?內(nèi)容詳解

  • 自定義變量
    • 變量名 = 變量值? var = hello
  • 預(yù)定義變量
    • AR:? 歸檔維護(hù)程序的名稱 默認(rèn)數(shù)值為 ar
    • CC:C 編譯器的名稱 默認(rèn)數(shù)值為cc
    • CXX:C++編譯器的名稱 默認(rèn)數(shù)值為g++
    • $@:目標(biāo)的完整路徑
    • $<: 第一個(gè)依賴的文件的名稱
    • $^ :所有的依賴文件的
  • 獲取變量的數(shù)值
    • $(變量名字)
app:mian.c a.c b.cgcc -c main.c a.c b.capp:main.c a.c b.c$(CC) -c $^ -o $@
  • 模式匹配
app:sub.o add.o mult.o main.ogcc sub.o add.o mult.o main.osub.o:sub.cgcc -c sub.c -o sub.oadd.o:add.cgcc -c add.c -o add.omult.o:mult.cgcc -c mult.c -o mult.omain.o:main.cgcc -c main.c -o main.o模式匹配%.o:%.c% 通配符,匹配一個(gè)字符串 %.o:%.cgcc -c $< -o $@

函數(shù)

(wildcard PATTERN)

  • 功能:獲取指定目錄下指定類型的文件列表
  • 參數(shù):PATTERN 指的是某個(gè)或者多個(gè)目錄下的對(duì)應(yīng)的某種類型的文件,如果有多個(gè)目錄,一般使用空格進(jìn)行間隔
  • 返回:得到的若干個(gè)文件的文件列表 文件名字之間使用空格進(jìn)行間隔

例子

$(wildcard *.c ./sub/*.c)返回?cái)?shù)值的格式:a.c b.c d.c e.c f.c

$(patsubst <pattern>,<replacement>,<text>)

  • ?功能:查找<text>中的單詞(單詞以“空格”、“Tab”或者"回車"、"換行"分隔)是否符合模式<pattern>,如果匹配的話,則用<replacement>替代
  • <pattern> 可以包括通配符"%" 表示任意長(zhǎng)度的子串。如果<replacement>中 也包含“%s”,那么<replacement>中的這個(gè)'%',將是<pattern>中的%所代表的子串
  • 使用'\'進(jìn)行轉(zhuǎn)義 ,即 \%表示真實(shí)含義的%字符

例子

$(patsubst %.c , %.o , x.c bar.c)返回?cái)?shù)值的類型 x.o bar.o

刪除 所有的.o 文件

  • ?使用命令 make clean 手動(dòng)清除文件
.PHONY:clean //將clean作為偽目標(biāo),就不會(huì)生成clean文件 clean:rm $(objs) -f

CMakeLists.txt文件的參考鏈接

  • CMakeLists模板持續(xù)更新中,歡迎補(bǔ)充
  • CMakeLists.txt編寫常用命令
  • CMake 語(yǔ)法 - 詳解 CMakeLists.txt
  • CMakeLists.txt 語(yǔ)法介紹與實(shí)例演練
  • 【CMake】CMakeLists.txt的超傻瓜手把手教程(附實(shí)例源碼)
  • Cmake知識(shí)----編寫CMakeLists.txt文件編譯C/C++程序

總結(jié)

以上是生活随笔為你收集整理的C++ Makefile文件详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。