Linux高并發服務器開發 第八天(makefile的規則 wildcard/patsubst函數 普通變量/自動變量/其他關鍵字)

目錄

1.makefile

1.1makefile的規則

1.2兩個函數

1.3三個自動變量

1.3.1普通變量 (自定義變量)

1.3.2自動變量

1.3.3其他關鍵字

- ALL/all

- clean


1.makefile

- 作用:進行項目管理。
- 初步學習:1個規則、2個函數、3個自動變量。
- 要想使用默認的make命令,管理項目。makefile文件名:必須是 “makefile”? 或 “Makefile”

1.1makefile的規則

語法:
目標:依賴條件
(一個tab縮進)命令

舉例:

- 目標的時間,必須晚于依賴條件的時間,否則,更新目標。
- 依賴條件,如果不存在,尋找新的規則去產生依賴條件。

舉例:

1.2兩個函數

wildcard 函數:用來匹配文件名,得到字符串
src = $(wildcard ./*.c)? : 匹配當前工作目錄下的所有.c文件。將文件名組成列表,賦值給變量 src
??? 相當于: src = add.c sub.c mul.c

patsubst 函數:用來字符串替換
obj = $(patsubst %.c, %.o, $(src)) : 將 參3 中,包含 參1的部分,替換為 參2.
??? 相當于: obj = add.o sub.o mul.o
obj = $(patsubst %.c, %, $(src))
??? 相當于: obj = add sub mul

舉例:

可以替換為:

1.3三個自動變量

1.3.1普通變量 (自定義變量)

- 定義變量語法:變量名 = 變量值? (都是字符串)
??? - 舉例:foo = abc
- 取變量值語法:$(變量)
??? - 舉例:bar = $(foo)? ===>? bar = abc
- makefile 自帶變量:
??? - CC = cc
??? - CPPFLAGES
??? - CFLAGES
??? - LDFLAGES

1.3.2自動變量

- $@: 在規則的命令中,表示規則中的目標。

替換為
- $^:? 在規則的命令中,表示所有依賴條件。

- $<:? 在規則的命令中,表示第一個依賴條件。如果將該變量應用在 “模式規則” 中,它可以將依賴條件列表中的每一個依賴,依次取出,套用模式規則。

替換為

1.3.3其他關鍵字
- ALL/all: ?

??? - 用來給 makefile 文件,指定 “終極目標”。

??? - makefile 文件,默認的規則為:從上而下,碰到的第一個 規則中的目標,為 “終極目標”。我們可以使用 ALL 指定終極目標。

- clean:

??? - 用來 借助 makefile 清除項目中的指定文件。如:*.o、a.out

??? - 舉例:


??? ????????

1.4模式規則

- 可以將makefile文件中,具有嚴格統一格式的規則,使用模式規則代替。要求模式規則中,只能使用 “$<” 符號。

- 靜態模式規則:
??? - 將模式規則,指定給某一個變量使用。
?$(obj):%.o:%.c
????? gcc -c $< -o $@

1.5偽目標

- 針對,殘缺的規則,也能使之生成目標。

makefile
.PHONY:clean ALL

1.6 其他參數

- -n:模擬執行 makefile ,不真正執行!推薦首次編寫 makefile 完成時,使用!!!
- -f:指定命名為 非 “makefile” 的文件。執行make命令

1.7完成版

src = $(wildcard *.c)?????????????????? ?
obj = $(patsubst %.c, %.o, $(src))?????? ?

# 使用gcc 覆蓋 cc
CC = gcc
target = app

ALL:$(target)

$(target):$(obj)?????????? ?
??? $(CC) $^ -o $@

$(obj):%.o:%.c
??? $(CC) -c $< -o $@

clean:
??? -rm -rf $(obj) $(target)

.PHONY:clean ALL

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

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

相關文章

Vue動態控制disabled屬性

參考:https://blog.csdn.net/guhanfengdu/article/details/126082781 在Vue中disabled:的值是受布爾值影響的&#xff0c;false為關閉禁用&#xff0c;true為開啟禁用效果。 結果就是true會讓按鈕禁用 相反false會讓按鈕重新可以使用 那如果想要通過id屬性值來判斷是否禁用…

【DevOps】Jenkins項目發布

Jenkins項目發布 文章目錄 Jenkins項目發布前言資源列表基礎環境一、Jenkins發布靜態網站1.1、項目介紹1.2、部署Web1.3、準備gitlab1.4、配置gitlab1.5、創建項目1.6、推送代碼 二、Jenkins中創建gitlab憑據2.1、創建憑據2.2、在Jenkins中添加遠程主機2.3、獲取gitlab項目的UR…

每日一學——自動化工具(Jenkins)

3.2 Jenkins 3.2.1 CI/CD流程設計 嘿&#xff0c;小伙伴們&#xff01;今天我們來聊聊Jenkins——這個在持續集成&#xff08;CI&#xff09;和持續部署&#xff08;CD&#xff09;領域里大名鼎鼎的工具。Jenkins不僅可以幫我們自動化構建和測試代碼&#xff0c;還能自動部署…

Vue2/Vue3使用DataV

Vue2 注意vue2與3安裝DataV命令命令是不同的Vue3 DataV - Vue3 官網地址 注意vue2與3安裝DataV命令命令是不同的 vue3vite 與 Vue3webpack 對應安裝也不同vue3vite npm install kjgl77/datav-vue3全局引入 // main.ts中全局引入 import { createApp } from vue import Da…

【AI學習】Transformer深入學習(二):從MHA、MQA、GQA到MLA

前面文章&#xff1a; 《Transformer深入學習&#xff08;一&#xff09;&#xff1a;Sinusoidal位置編碼的精妙》 一、MHA、MQA、GQA 為了降低KV cache&#xff0c;MQA、GQA作為MHA的變體&#xff0c;很容易理解。 多頭注意力&#xff08;MHA&#xff09;&#xff1a; 多頭注…

trendFinder - 利用 AI 掌握社交媒體上的熱門話題

1600 Stars 177 Forks 7 Issues 2 貢獻者 MIT License Javascript 語言 代碼: https://github.com/ericciarla/trendFinder 更多AI開源軟件&#xff1a;AI開源 - 小眾AI Trend Finder 收集并分析來自關鍵影響者的帖子&#xff0c;然后在檢測到新趨勢或產品發布時發送 Slack 通知…

以圖像識別為例,關于卷積神經網絡(CNN)的直觀解釋

大家讀完覺得有意義記得關注和點贊&#xff01;&#xff01;&#xff01; 作者以圖像識別為例&#xff0c;用圖文而非數學公式的方式解釋了卷積神經網絡的工作原理&#xff0c; 適合初學者和外行掃盲。 目錄 1 卷積神經網絡&#xff08;CNN&#xff09; 1.1 應用場景 1.2 起…

Python 數據結構揭秘:棧與隊列

棧&#xff08;Stack&#xff09; 定義 棧是一種后進先出&#xff08;Last In First Out, LIFO&#xff09;的數據結構。它類似于一個容器&#xff0c;只能在一端進行插入和刪除操作。棧有兩個主要的操作&#xff1a;push&#xff08;入棧&#xff09;和 pop&#xff08;出棧…

vim 的基礎使用

目錄 一&#xff1a;vim 介紹二&#xff1a;vim 特點三&#xff1a;vim 配置四&#xff1a;vim 使用1、vim 語法格式2、vim 普通模式&#xff08;1&#xff09;保存退出&#xff08;2&#xff09;光標跳轉&#xff08;3&#xff09;文本刪除&#xff08;4&#xff09;文本查找&…

HP 電腦開機黑屏 | 故障判斷 | BIOS 恢復 | BIOS 升級

注&#xff1a;本文為 “HP 電腦開機黑屏 | 故障判斷 | BIOS 恢復 | BIOS 升級” 相關文章合輯。 引文圖片 csdn 轉儲異常&#xff0c;重傳。 篇 1&#xff1a;Smart-Baby 回復中給出故障現象判斷參考 篇 2、篇3 &#xff1a;HP 官方 BIOS 恢復、升級教程 開機黑屏&#xff0c…

JAVA:利用 Redis 實現每周熱評的技術指南

1、簡述 在現代應用中&#xff0c;尤其是社交媒體和內容平臺&#xff0c;展示熱門評論是常見的功能。我們可以通過 Redis 的高性能和豐富的數據結構&#xff0c;輕松實現每周熱評功能。本文將詳細介紹如何利用 Redis 實現每周熱評&#xff0c;并列出完整的實現代碼。 2、需求分…

VSCode下配置Blazor環境 斷點調試Blazor項目

VSCode下使用Blazor的環境配置和插件推薦 Blazor是一種用于構建交互式Web UI的.NET框架&#xff0c;它可以讓你使用C#、Razor和HTML進行Web開發&#xff0c;而不需要JavaScript。在這篇文章中&#xff0c;我們將介紹如何在VSCode中配置Blazor環境&#xff0c;并推薦一些有用的…

《Rust權威指南》學習筆記(一)

基本介紹 1.Rust使用場景 &#xff1a;需要運行速度、需要內存安全、更好的利用多處理器。程序員無法在安全的Rust代碼中執行任何非法的內存操作。相對于C#等帶有垃圾回收機制的語言來講&#xff0c;Rust遵循了零開銷抽象&#xff08;Zero-Cost Abstraction&#xff09;規則&a…

STM32-筆記26-WWDG窗口看門狗

一、簡介 窗口看門狗用于監測單片機程序運行時效是否精準&#xff0c;主要檢測軟件異常&#xff0c;一般用于需要精準檢測程序運行時間的場合。 窗口看門狗的本質是一個能產生系統復位信號和提前喚醒中斷的6位計數器&#xff08;有的地方說7位。其實都無所謂&#xff0…

ARM CCA機密計算安全模型之固件更新

安全之安全(security)博客目錄導讀 目錄 1、遠程更新 2、本地更新 3、魯棒性 1、遠程更新 Arm歡迎關于CCA固件更新需求的反饋。一般而言&#xff0c;CCA固件更新過程可以描述如下&#xff1a; CCA固件更新客戶端使用固件更新協議與遠程更新服務通信。CCA固件更新客戶端將…

Assimp的ReadFileFromMemory函數踩坑

使用ReadFileFromMemory函數加載模型的問題 使用ReadFileFromMemory函數無法加載obj和md3等模型數據分散在多個文件中的模型。obj模型通常有一部分數據&#xff08;如紋理數據&#xff09;在mtl文件中保存&#xff0c;如果只把obj文件加載到內存中&#xff0c;并通過ReadFileF…

機組的概述

計算機系統組成 硬件系統和軟件系統 計算機硬件 1.馮諾依曼機基本思想 特點 1.采用“存儲程序”工作方式 2.硬件系統由運算器&#xff0c;存儲器&#xff0c;控制器&#xff0c;輸入輸出設備組成 3.指令和數據存在存儲器中&#xff0c;形式無區別 4.指令和數據用二進制代…

后端開發入門超完整速成路線(算法篇)

引言 后端開發是軟件開發中不可或缺的一部分&#xff0c;它涉及到服務器、數據庫、API等核心組件的構建和維護。對于初學者來說&#xff0c;掌握算法和數據結構是進入后端開發領域的基礎。本文將為你提供一個超完整的算法學習路線&#xff0c;幫助你快速入門&#xff0c;并在文…

主鍵有多種設計

1. 自增ID id bigint NOT NULL AUTO_INCREMENT COMMENT 主鍵ID 優點&#xff1a; 簡單直觀自動生成遞增有序&#xff0c;對索引友好 缺點&#xff1a; 可能暴露業務信息分布式系統下需要特殊處理合并數據時可能沖突 2. UUID/GUID id char(36) NOT NULL COMMENT 主鍵ID …

【面試】后端開發面試中常見數據結構及應用場景、原理總結

在后端開發面試中&#xff0c;常見的數據結構包括數組、鏈表、棧、隊列、二叉樹、平衡樹、堆、圖和哈希表等。以下是這些數據結構的總結&#xff0c;包括它們的應用場景、優缺點。 常見數據結構及其應用場景 數據結構應用場景數組存儲固定大小的數據集合&#xff0c;如學生成…