1. 程式人生 > >[開發記錄]Makefile快速入門

[開發記錄]Makefile快速入門

這裡簡單說一下Makefile的寫法,主要是個人的喜歡寫法,複雜的語法部門沒有加入,只是一些簡單的入門,同時也是我經常使用的。

常用的函式

在Makefile中也是有一些我們常用的函式的,簡單的比如:

addprefix

主要功能就是增加字首,用法如下:

$(addprefix PREFIX,NAMES...)

例子:

$(addprefix src/,foo.c bar.c)

得到的列表為src/foo.c src/bar.c

addsuffix

增加字尾,用法與addsuffix類似,用法如下:

$(addsuffix PREFIX,NAMES...)

例子:

$(addsuffix c,foo bar)

得到的列表為foo.c bar.c

wildcard

獲取當前目錄下符合條件的檔案,也是使用一個簡單的例子:

SRC_FILES = $(wildcard *.c *.cpp)

此時會將資料夾內的c和cpp檔案賦值給SRC_FILES,後續可以使用這個變數進行處理。wildcard的語法是:

$(wildcard PATTERN...)

在Makefile中,他被展開為已經存在的,使用空格分開的並且匹配此模式的檔案列表。通常會使用萬用字元進行匹配,如果匹配不到任何檔案,則會返回空。

patsubst

這個函式主要用匹配替換,還是先出一個例子:

OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SRC_FILES)))

上面這個離職中,OBJS的值會是$(SRC_FILES)中所有檔案的名字,但是以.o最為副檔名。patsubst的語法規則如下:

$(patsubst %.c,%.o,$(file_list))

patsubst有三個引數,分別是:
1. 第一個引數是需要匹配的樣式
2. 第二個引數是替換後的樣式
3. 第三個引數是以空格隔開的需要處理的列表

一般都是用於生成.o的列表,然後通過依賴關係依次展開。

內建變數

變數 變數含義
[email protected] 擴充套件單錢的目標檔名
$< 擴充套件成依賴的列表中的第一個依賴檔名
$^ 擴充套件成整個依賴的列表(去重)
$? 表示比目標還要新的檔案列表
$% 僅當目標是函式庫檔案中,表示規則中的目標成員名。
$+ $^類似,是所有依賴目標的集合,但是並不去重
$* 這個變量表示目標模式中%以及之前的部分。

下面三個並不常用,也比較難理解,所以我加了一個例子,這裡把%.o:%.c展開寫,併為了區分$<$^稍作修改:

cpp_func.o : cpp_func_1.cpp cpp_func_2.cpp

此時,
- [email protected] | cpp_func.o
- $< | cpp_func_1.cpp
- $^ | cpp_func_1.cpp cpp_func_2.cpp
- $? | cpp_func_1.cpp cpp_func_2.cpp
- $% | 這種情況下應該是空的
- $* | cpp_func(但是上面的沒有使用%.o這種形式去推到,上面那麼寫並不一定會是這樣的)

外部變數賦值

這個比較簡單,用一個比較簡單的例子就可以很明確了:

SRC_FILE = $(in)

在執行make的時候,在shell裡面如下輸入即可:

make all in=hello_world.cpp

簡單的一個Makefile例項

XX = g++
CC = g++
CFLAGS = -g
CFLAGSXX = -g --std=c++11
INC = -I./
LIB = -L./
TARGET = test_hello
SRC_FILES = $(wildcard *.c *.cpp)
OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SRC_FILES)))

%.o:%.c
    @echo "excu $(CC) -c $< -o [email protected] $(CFLAGS) $(INC)"
    $(CC) -c $< -o [email protected] $(CFLAGS) $(INC)

%.o:%.cpp
    @echo "excu $(XX) -c $< -o $(CFLAGSXX) $(INC)"
    $(XX) -c $< -o [email protected] $(CFLAGSXX) $(INC)

$(TARGET):$(OBJS)
    @echo "make [email protected] by $^"
    $(XX) $^ -o [email protected] $(CFLAGS) $(INC) $(LIB)
    $(RM) *.o $(OBJS)

all:$(TARGET)
    @echo "make all"

clean:
    $(RM) $(TARGET) $(OBJS)

test:$(TARGET)
    @echo "make test"
    ./$(TARGET)

相關推薦

[開發記錄]Makefile快速入門

這裡簡單說一下Makefile的寫法,主要是個人的喜歡寫法,複雜的語法部門沒有加入,只是一些簡單的入門,同時也是我經常使用的。 常用的函式 在Makefile中也是有一些我們常用的函式的,簡單的比如: addprefix 主要功能就是增加字首,用法如

全棧開發之HTML快速入門(一)

ack enter 提示 其他 red tle 顯示圖片 val password 一、HTML 是什麽? HTML 指的是超文本標記語言 (Hyper Text Markup Language) HTML 不是一種編程語言,而是一種標記語言 (markup lan

GNU開發工具——CMake快速入門

CMake 快速入門GNU開發工具——CMake快速入門 一、CMake簡介 不同Make工具,如GNU Make、QT的qmake、微軟的MS nmake、BSD Make(pmake)等,遵循著不同的規範和標準,所執行的Makefile格式也不同。如果軟件想跨平臺,必須要保證能夠在不同平臺編譯。而如果使用

H5和小程序直播開發 零距離快速入門

以及 重要 掌握 經驗 導致 技巧 地址 很大的 net 第1章 課程介紹 對於課程整體以及直播行業的現狀進行介紹 第2章 直播工作原理 所謂知其然也要知其所以然,只會用別人總結好的東西很難有質的進步,只有深諳背後的工作原理才能進一步吃透到進階。本章從直播協議入手到工作原理

Python開發——十分鐘快速入門

版權宣告:本文為博主原創文章,未經博主允許不得轉載。原文連結:https://blog.csdn.net/qq_37992321/article/details/83995517 一、瞭解Python 什麼是python? python有什麼特色? 二、在Windows系統下搭建P

微信小程式開發框架—wepy快速入門

 小程式框架wepy文件 Github地址 wepy官網:https://tencent.github.io/wepy/index.html 專案建立與使用 安裝wepy 以下安裝都通過npm安裝 安裝 wepy 命令列工具。

H5和小程式直播開發 零距離快速入門

第5章 H5與微信小程式直播實戰 本章側重實戰,幫助大家分析h5播放器選型、開發技巧,從頭到尾完成直播開發任務,看完本章節可以輕鬆完成自己的直播業務開發。微信小程式支援直播,但是和h5直播有很大的不同,如何快速補上這塊知識內容讓自己擁有較全面的小程式開發能力勢在必行,本章會從原理、配置、開發、除錯等多

Bmob 開發 Android程式快速入門 2

                                Bmob 開發  Android程式快速入門 2  

Bmob 開發 Android程式快速入門 1

                                 Bmob 開發  Android程式快速入門 1

Bmob 開發 Android程式快速入門 11 其他功能

                         Bmob 開發 Android程式快速入門 11 其他功能     獲取伺服器時間

Bmob 開發 Android程式快速入門 10 訊息推送

                             Bmob 開發 Android程式快速入門 10 訊息推送    

Bmob 開發 Android程式快速入門 9 使用者管理

                     Bmob 開發 Android程式快速入門 9 使用者管理     使用者管理   

Bmob 開發 Android程式快速入門 8 資料實時同步

                     Bmob 開發 Android程式快速入門 8 資料實時同步   資料實時同步 資料實時同步是一個超酷的功能!  

[後端開發]1.SpringBoot快速入門

目錄 開發環境配置 第一個SpringBoot程式 屬性配置 Controller的使用 spring-data-jpa 1.開發環境配置 (1) IDE: IntelliJ IDEA 2017.

Python開發【筆記】:git&github 快速入門

精神 源代碼 公開 平臺 per 其中 http cvs tro github入門 簡介:   很多人都知道,Linus在1991年創建了開源的Linux,從此,Linux系統不斷發展,已經成為最大的服務器系統軟件了。   Linus雖然創建了Linux,但Linux的壯大

spring IOC快速入門,屬性註入,註解開發

復雜 void erl main http val rri prop turn 我們使用spring框架也會使用到配置文件,我們需要在src下創建一個關於spring的配置文件,一般情況名稱叫applicationContext.xml 基本約束: <!DOCT

Datatables快速入門開發--一款好用的JQuery表格插件

支持 idt rst turn 插件 start sea 下拉框 進行   博主是一個java後端程序員小白,前端技術會用但不精通,做後臺的一些功能經常要涉及表格的展示,分頁,搜索,排序等等一系列功能,在經歷了一段時間的原始手段,開始接觸並使用Datatables,一個jq

AndroidStudio快速入門四:打造你的開發工具,settings必備

ack src paste libs box 下載 解釋 繼續 odi http://blog.csdn.net/jf_1994/article/details/50085825 前言:這裏是使用AS的基本設置,適合新入手的朋友閱讀,將這裏介紹的設置完基本使用無憂啦。 1、

【ASP.NET Core快速入門】(十四)MVC開發:UI、 EF + Identity實現

dfa models cti ted lec inpu word pri numeric 前言 之前我們進行了MVC的web頁面的Cookie-based認證實現,接下來的開發我們要基於之前的MvcCookieAuthSample項目做修改。 MvcCookieAuth

小程序開發快速入門教程(附源碼)

五分鐘上手-微信小程序 1:用沒有註冊過微信公眾平臺的郵箱註冊一個微信公眾號, 申請帳號 ,點擊 https://mp.weixin.qq.com/wxopen/waregister?action=step1 根據指引填寫信息和提交相應的資料,就可以擁有自己的小程序帳號。註冊完成之後開始登