C++ Makefile文件詳解

什么是Makefile文件

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

工作原理

  • 命令在執行之前,需要檢查規則中依賴是否存在
    • 如果存在:執行命令
    • 如果不存在:向下檢查其他的規則,檢查有沒有一個規則是用來生成這個依賴的,如果找到,就執行規則中的命令
  • 檢測更新,在執行規則中的命令時,會比較目標和依賴文件的時間
    • 如果依賴的時間比目標時間晚,需要重新生成目標
    • 如果依賴的時間比目標時間早,目標不需要更新,對應規則中的命令不需要被執行
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

?內容詳解

  • 自定義變量
    • 變量名 = 變量值? var = hello
  • 預定義變量
    • AR:? 歸檔維護程序的名稱 默認數值為 ar
    • CC:C 編譯器的名稱 默認數值為cc
    • CXX:C++編譯器的名稱 默認數值為g++
    • $@:目標的完整路徑
    • $<: 第一個依賴的文件的名稱
    • $^ :所有的依賴文件的
  • 獲取變量的數值
    • $(變量名字)
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% 通配符,匹配一個字符串
%.o:%.cgcc -c $< -o $@

函數

(wildcard PATTERN)

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

例子

$(wildcard *.c ./sub/*.c)返回數值的格式:a.c b.c d.c e.c f.c

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

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

例子

$(patsubst %.c , %.o , x.c bar.c)返回數值的類型 x.o bar.o

刪除 所有的.o 文件

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

CMakeLists.txt文件的參考鏈接

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446526.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446526.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446526.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言 項目練習-家庭收支軟件

目標 需求說明 界面說明 登記收入界面: 登記支出界面 收支明細界面 退出界面 項目代碼改進要求 自己完成的代碼 版本1 #include<stdio.h> #include<string.h> void choose(int button,int i); //項目--家庭收支軟件 static double total10000;//總金額 #de…

c++ fmt 庫安裝和使用示例、clion配置

安裝 git clone https://github.com/fmtlib/fmt.gitmake .mkae && make install CLion使用 使用和安裝存在出入下載源碼&#xff0c;可以先 clone 到你的項目中去&#xff0c;https://github.com/fmtlib/fmt &#xff0c;我放到的是項目的 dependencies 目錄然后在…

C語言 項目 CRM系統(客戶信息管理系統)

項目目標 項目需求說明 系統界面 1)添加客戶界面 通過編號來區分客戶 2)刪除客戶界面 對用戶輸入的編號進行核查,存在與否,合法與否 3)顯示客戶列表界面 4)修改客戶信息的界面 項目設計 Customer結構體的設計 CRM系統結構框架圖 案例代碼 #include <stdio.h>…

代碼重構 防火墻 相關知識

參考 依據Linux命令以及sysconf下現有的iptables命令&#xff0c;詳見hsm_sysconf_server/src/sysconf_server.cpp中的firewall規則。 接口名稱 firewall_manager 目的(現實) 根據網口直連獲取當前eth0和eth1的各種信息保證設置的正確性 以及要針對管理口和服務口設計不…

C語言 文件的基本介紹

基本介紹 輸入流與輸出流 重點在C程序(內存)的數據移動方向 對于C程序(內存) 輸入數據:輸入流 輸出數據:輸出流 輸入 和輸出 C標準庫 標準輸入輸出庫 標準文件 getchar()&putchar()函數 代碼 #include<stdio.h> #include<stdlib.h> //文件--getchar()和…

ubuntu修改字體 樣式

使用 快捷鍵 ctrlaltt 打開終端安裝gnome-tweaks桌面管理工具 sudo apt install gnome-tweaksaltf2 在運行窗口輸入 gnome-tweaks 命令&#xff0c;然后回車打開優化窗口&#xff0c;選擇第二個front字體選項ubuntu顯示中文

C語言 文件的讀寫

引入 OS操作系統 打開文件fopen()函數 讀寫模式: r:讀取已有文件 w:文件不存在,創建文件并寫入文件.文件存在,內容清零,再寫入文件 a: 文件不存在,創建文件并寫入文件.文件存在,以追加的形式寫入文件 r:讀寫已有文件 w:文件不存在,創建文件并讀寫文件.文件存在,內容清零,再…

StarWind V2V Image Converter:虛擬機鏡像轉換工具,可將 IMG 文件轉換為 VMware VMDK 文件

操作流程 選擇本地的需要轉換的文件找到源文件的路徑&#xff0c;img格式選擇轉化后的格式 第一個選擇 第二個 速度快一些選擇將轉化后的文件的存儲路徑軟件的下載鏈接 鏈接: https://pan.baidu.com/s/1Fe6yI42Zz9d_Q7aUhGe1FQ 提取碼: 5vmv

數學建模基礎知識

原型與模型 模型的分類 數學建模 數學建模的分類 成為建模大神 數學建模比賽 數學建模一般步驟 數學建模全過程 數學建模論文寫作 1&#xff09;摘要:是決定最后獲獎等級的關鍵 2&#xff09;問題重述:使用自己的語言將問題重述一次 3&#xff09;符號說明:對于常見的或…

數學建模 線性規劃模型基本原理

線性規劃問題 例1.1 可行解&可行域 matlab標準形式及軟件求解 標準形式: C稱為價值向量 如果是求max,加一個負號-c^T 如果是求Ax>b,加一個負號-Ax<b 使用matlab求線性規劃例題 求解的是最大值:加上負號 y是求解的最優解 zeros()使用: zeros(n)&#xff1a;生…

接上文 ,解決 虛擬機VM,U盤(磁盤)裝有系統,將其中系統安裝到另外一塊磁盤的具體操作

問題原因&#xff1a;接上文&#xff0c;將生成的vsdk格式的磁盤導入VM創建鏡像&#xff0c;相關于U盤裝載系統鏡像&#xff0c;將U盤其中的鏡像導入到磁盤里邊&#xff0c;U盤是引導&#xff0c;會將系統最終裝載到磁盤出錯原因是因為 沒有新建第二塊磁盤 解決 新增一塊磁盤如…

數學建模 層次分析法

簡介 針對多目標,多準則或無結構特性的復雜決策問題 步驟 解決評價類問題 評價類問題: 資料查找: 1)查找相關文獻 2)如果沒有找到相關文獻 3)搜索 通過上述步驟后得到的結果 構建層次結構模型 舉例: 成對比較矩陣 標度表: 奇數:越大越重要 偶數:上述兩相鄰判斷的中值…

ubuntu配置靜態IP地址

sysconf_client update -t network -j {"netdev":"eth0","ip":"a.b.c.d","mask":"255.255.255.0"}

接上文 VM安裝的ubuntu系統,配置雙網卡

點擊編輯 進入虛擬網絡編輯器 點擊更改設置 補充&#xff1a;如何判定橋接至哪張網卡&#xff1f;進入win&#xff0c;winr 輸入cmd&#xff1b;輸入 systeminfo選中系統&#xff0c;點擊右鍵&#xff0c;選中設置 重啟系統使用 ifconfig查看&#xff0c;發現有eth0和eth1…

數學建模 趣味數模問題(數模入門)

狼羊人菜渡河問題 解答 試探法 因為有4個變量,所以一共有222*216種狀態 找出其中不安全的狀態:無人看守的狀態下:狼羊一起,羊菜一起 人 狼 羊 菜(0是在對面,1是在這邊) 狼羊一起:(0,1,1,0) (0,1,1,1) (1,0,0,0) (1,0,0,1) 羊菜一起:(0,0,1,1) (1,1,0,0) 其余的10個都是安全狀態…

數學建模 整數規劃的基本原理和標準形式

整數規劃模型 變量限制為整數 一般解決運輸問題和整數問題 分類: 研究的是純整數規劃問題 整數規劃特點 實數的解不能直接四舍五入為整數,因為此時可能不滿足約束條件 舉例-合理下料問題 模型: 題目: 這是在使用材料 1)使用零件A1-Am毛胚,就是使用零件 2)下料方式B1-Bn就…

程序員 面試筆記 C++ 程序設計的基礎 第10章

10.1.1 程序的編譯和執行 以#開頭的代碼都屬于預處理器處理的步驟#include 將頭文件的內容包含進入當前源文件中#define 展開宏定義#ifdef 處理條件編譯指令(#ifdef、ifndef、#if、#else、#elif、#endif)#other 處理其他宏指令(#error、#warning、#line、#pragma) 預…

數學建模 分支限界算法求解整數規劃原理以及編程實現

引入 線性規劃問題(松弛問題) 圖解法: 使用圖解法求出最優解,再使用四舍五入求出的整數解不滿足條件 完全枚舉法(窮舉法):找出集合內所有滿足條件的整數點,再帶入不等式中,看是否有最優解 分支限界法 說明: 松弛問題:線性規劃問題 ILP:整數規劃,在線性規劃的基礎上對決策…

java Map統計字符串中元素的數量

public int firstUniqChar(String s) {Map<Character, Integer> map new HashMap();char[] chars s.toCharArray();//先統計每個字符的數量for (char ch : chars) {map.put(ch, map.getOrDefault(ch, 0) 1);}//然后在遍歷字符串s中的字符&#xff0c;如果出現次數是1就…