欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

makefile(04)_函數(shù)

9.函數(shù)定義及調(diào)用

Makefile中支持函數(shù)的概念,make解析器提供了一系列函數(shù)供Makefile使用。同時可以自定義函數(shù)。

汪清ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!

9.1.自定義函數(shù)

在Makefile中支持自定義函數(shù)的實現(xiàn),并調(diào)用執(zhí)行,通過define關(guān)鍵字來實現(xiàn)自定義函數(shù)。
函數(shù)定義的語法規(guī)則:
makefile(04)_函數(shù)
自定義函數(shù)的本質(zhì):
1.自定義函數(shù)其實是一個多行變量,無法直接調(diào)用;通過call 關(guān)鍵字來使用(call的作用就是將實參替換到函數(shù)體對應(yīng)的位置)
2.自定義函數(shù)是一種過程調(diào)用,沒有任何的返回值;
3.用于定義命令集合,并應(yīng)用于規(guī)則中。
示例:

.PHONY : test

define func1
    @echo "My name is $(0)"
endef

define func2
    @echo "My name is $(0)"
    @echo "Param 1 => $(1)"
    @echo "Param 2 => $(2)"
endef

var := $(call func1)
new := $(func1)

test :
    @echo "new => $(new)"
    @echo "var => $(var)"
    $(call func1)  #@echo My name is func1
    $(call func2, D.T.Software, delphi_tang)

輸出結(jié)果:
makefile(04)_函數(shù)

9.2.預(yù)定義函數(shù)

Make的函數(shù)提供了處理文件名,變量和命令的函數(shù),可以在需要的地方調(diào)用函數(shù)來處理指定的參數(shù),函數(shù)再調(diào)用的地方被替換為處理結(jié)果。
預(yù)定義函數(shù)的調(diào)用:
makefile(04)_函數(shù)
為什么自定義函數(shù)和預(yù)定義函數(shù)的調(diào)用形式完成不同?
本質(zhì)上,Makefile不支持真正意義上的自定義函數(shù),自定義函數(shù)本質(zhì)上是多行變量,預(yù)定義的call函數(shù)在調(diào)用時將參數(shù)傳遞給多行變量,自定義函數(shù)時call函數(shù)的參數(shù),并在call中被執(zhí)行。
示例:

.PHONY : test

define func1
    @echo "My name is $(0)"
endef

define func2
    @echo "My name is $(0)"
endef

var1 := $(call func1)
var2 := $(call func2)
var3 := $(abspath ./)
var4 := $(abspath test.cpp)

test :
    @echo "var1 => $(var1)"
    @echo "var2 => $(var2)"
    @echo "var3 => $(var3)"
    @echo "var4 => $(var4)"

輸出結(jié)果:
makefile(04)_函數(shù)

10.變量與函數(shù)的綜合運用

10.1.實戰(zhàn)需求:

自動生成target文件夾存放可執(zhí)行程序,生成objs文件夾存放編譯生成的目標(biāo)文件(*.o)
支持調(diào)試版本的編譯選擇(通過預(yù)編譯宏實現(xiàn)),考慮代碼的擴(kuò)展性(自定義變量)

10.2.工具原料:

$(wildcard _pattern),獲取當(dāng)前工作目錄中滿足_pattern的文件或者目錄
$(addprefix _prefix _name),給名字列表_name中的每一個名字增加前綴_prefix

10.3.關(guān)鍵技巧:

1.自動獲取當(dāng)前目錄下的源文件列表(函數(shù)調(diào)用),SRCS := $(wildcard *.c)
2.根據(jù)文件列表生成目標(biāo)文件列表(變量指定替換)OBJS := $(SRCS:.c=.o)
3.對每一個目標(biāo)文件列表加上路徑前綴(函數(shù)調(diào)用)OBJS := $(addprefix path/, $(OBJS))
規(guī)則中的模式替換:
這兩種模式替換的區(qū)別在于,后者的模式替換目標(biāo)來自于一個變量var,前者的目標(biāo)來自一個指定的文件夾。
makefile(04)_函數(shù) makefile(04)_函數(shù)
編譯規(guī)則的依賴:
makefile(04)_函數(shù)
最終程序:

CC := gcc
MKDIR := mkdir
RM := rm -fr

DIR_OBJS := objs
DIR_TARGET := target

DIRS := $(DIR_OBJS) $(DIR_TARGET)

TARGET := $(DIR_TARGET)/hello-makefile.out
# main.c const.c func.c
SRCS := $(wildcard *.c)
# main.o const.o func.o
OBJS := $(SRCS:.c=.o)
# objs/main.o objs/const.o objs/func.o
OBJS := $(addprefix $(DIR_OBJS)/, $(OBJS))

.PHONY : rebuild clean all

$(TARGET) : $(DIRS) $(OBJS)
    $(CC) -o $@ $(OBJS)
    @echo "Target File ==> $@"

$(DIRS) :
    $(MKDIR) $@

# 針對當(dāng)前文件下的工作目錄進(jìn)行模式替換
$(DIR_OBJS)/%.o : %.c
    ifeq ($(DEBUG),true)
        $(CC) -o $@ -g -c $^ 
    else   
        $(CC) -o $@ -c $^
    endif

rebuild : clean all

all : $(TARGET)

clean :
    $(RM) $(DIRS)

源文件main.c

extern void foo();

int main()
{
        foo();

        return 0;
}

源文件const.c
const char* g_hello = "hello makefile";
源文件func.c

#include "stdio.h"

extern char* g_hello;

void foo()
{
        printf("void foo() : %s\n", g_hello);
}

輸出結(jié)果
makefile(04)_函數(shù)

新聞標(biāo)題:makefile(04)_函數(shù)
網(wǎng)站鏈接:http://aaarwkj.com/article0/ijpjoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、定制網(wǎng)站做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站營銷微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司
日本少妇熟女一区二区| 亚洲av色福免费网站| 亚洲乱人伦一区二区三区| 国产成人午夜视频免费一区 | 97视频精品全部免费观看| 亚洲午夜一区二区不卡| 久草视频亚洲免费在线| 亚洲精品永久在线观看| 翔田千里精品久久一区二| 十八禁无遮挡污污污网站| 青青草免费在线播放视频网站| 91欧美在线激情视频| 91精品日日躁夜夜躁欧美| 91午夜福利国产在线观看| 做性视频大全在线观看| 欧美日在线观看加勒比| 国产精品五月婷婷六月丁香| 韩国电视剧大全免费国语观看 | 国产在线视频不卡福利片| 野花日本免费高清完整| 国产亚洲一区二区日韩欧美| 亚洲 欧美 日韩一区| 欧美日韩国产免费,日日骚| 色在线观看综合亚洲欧洲| 亚洲精品黄色片中文字幕| 日韩精品人成在线播放| 免费亚洲老熟熟女熟女熟女| 色婷婷亚洲综合色一区二区| 日本黄色小网站在线播放 | 精品国产亚洲av未满十八| 国产男女猛进猛出精品91| 中文字幕一区二区三天| 女人裸体网站无遮挡午夜| 欧美福利区免费观看视频| 一区二区三区在线观看淫| 色婷婷一区二区三区网站| 自偷自拍亚洲综合精品| 欧美又粗又成人大视频| 精品欧美高清免费视频| 国产午夜视频成人无遮挡| 激情综合色综合久久丁香|