C++ Makefile文件详解
生活随笔
收集整理的這篇文章主要介紹了
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í)行
?內(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ù)值
- $(變量名字)
- 模式匹配
函數(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)清除文件
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡网上支付有利提额吗?多多少少会有影
- 下一篇: C++primer第八章 IO库 8.