linux makefile字符串操作函數 替換subst、模式替換patsubst、去首尾空格strip、查找字符串findstring、過濾filter、反過濾filter-out、排序函數sort、取單詞word、取單詞串wordlist、個數統計words


1.1       字符操作函數使用

在Makefile中可以使用函數來處理變量,從而讓我們的命令或是規則更為的靈活和具有智能。make所支持的函數也不算很多,不過已經足夠我們的操作了。函數調用后,函數的返回值可以當做變量來使用。
函數調用,很像變量的使用,也是以“$”來標識的,其語法如下:
$(<function> <arguments> )
或是
${<function> <arguments>}
這里,<function>就是函數名,make支持的函數不多。<arguments>是函數的參數,參數間以逗號“,”分隔,而函數名和參數之間以“空格”分隔。函數調用以“$”開頭,以圓括號或花括號把函數名和參數括起。例如字符替換函數。

1.1.1        字符串替換函數

$(subst <from>,<to>,<text> )
名稱:字符串替換函數——subst。
功能:把字串<text>中的<from>字符串替換成<to>。
返回:函數返回被替換過后的字符串。

# Makefile 內容

all:

    @echo $(subst t,e,maktfilt)  <-- 將t替換為e

 

# bash 中執行 make

$ make

makefile

1.1.2        模式字符串替換函數

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

名稱:模式字符串替換函數——patsubst。
功能:以通配符的形式替換字符,查找<text>中的單詞(單詞以“空格”、“Tab”或“回車”“換行”分隔)是否符合模式<pattern>,如果匹配的話,則以<replacement>替換。這里,<pattern>可以包括通配符“%”,表示任意長度的字串。如果<replacement>中也包含“%”,那么,<replacement>中的這個“%”將是<pattern>中的那個“%”所代表的字串。(可以用“\”來轉義,以“\%”來表示真實含義的“%”字符)返回:函數返回被替換過后的字符串。
示例:
$(patsubst %.c,%.o,x.c.c bar.c)
把字串“x.c.c bar.c”符合模式[%.c]的單詞替換成[%.o],返回結果是“x.c.o bar.o”

 

# Makefile 內容

all:

    @echo $(patsubst %.c,%.o,programA.c programB.c)

 

# bash 中執行 make

$ make

programA.o programB.o

1.1.3        去首尾空格函數

名稱:去空格函數——strip。
功能:去掉<string>字串中開頭和結尾的空字符。
返回:返回被去掉空格的字符串值。
示例:
$(strip a b c )
把字串“a b c ”去到開頭和結尾的空格,結果是“a b c”。

# Makefile 內容

VAL := "       aa  bb  cc "

 

all:

    @echo "去除空格前: " $(VAL)

    @echo "去除空格后: " $(strip $(VAL))

 

# bash 中執行 make

$ make

去除空格前:         aa  bb  cc

去除空格后:   aa bb cc

1.1.4        查找字符串函數

$(findstring <find>,<in> )

名稱:查找字符串函數——findstring。
功能:在字串<in>中查找<find>字串。
返回:如果找到,那么返回找到的字符串,否則返回空字符串。
示例:
$(findstring a,a b c)
$(findstring a,b c)
第一個函數返回“a”字符串,第二個返回“”字符串(空字符串)

# Makefile 內容

VAL := "       aa  bb  cc "

 

all:

    @echo $(findstring aa,$(VAL))

    @echo $(findstring ab,$(VAL))

 

# bash 中執行 make

$ make

aa

1.1.5        過濾函數

$(filter <pattern...>,<text> )
名稱:過濾函數——filter。
功能:以<pattern>模式過濾<text>字符串中的單詞,保留符合模式<pattern>的單詞。可以有多個模式。
返回:返回符合模式<pattern>的字串。
示例:
sources := foo.c bar.c baz.s ugh.h
foo: $(sources)
cc $(filter %.c %.s,$(sources)) -o foo
$(filter %.c %.s,$(sources))返回的值是“foo.c bar.c baz.s”。
$(filter-out <pattern...>,<text> )

 

# Makefile 內容

all:

    @echo $(filter %.o %.a,program.c program.o program.a)

 

 

# bash 中執行 make

$ make

program.o program.a

1.1.6        反過濾函數

名稱:反過濾函數——filter-out。

功能:以<pattern>模式過濾<text>字符串中的單詞,去除符合模式<pattern>的單詞。可
以有多個模式。
返回:返回不符合模式<pattern>的字串。
示例:
objects=main1.o foo.o main2.o bar.o
mains=main1.o main2.o
$(filter-out $(mains),$(objects)) 返回值是“foo.o bar.o”。

# Makefile 內容

all:

    @echo $(filter-out %.o %.a,program.c program.o program.a)

 

# bash 中執行 make

$ make

program.c

1.1.7        排序函數

名稱:排序函數——sort。
功能:給字符串<list>中的單詞排序(升序)。
返回:返回排序后的字符串。
示例:$(sort foo bar lose)返回“bar foo lose” 。
備注:sort函數會去掉<list>中相同的單詞。
$(word <n>,<text> )

# Makefile 內容

all:

    @echo $(sort bac abc acb cab)

 

# bash 中執行 make

$ make

abc acb bac cab

1.1.8        取單詞函數

名稱:取單詞函數——word。
功能:取字符串<text>中第<n>個單詞。空格隔開(從一開始)
返回:返回字符串<text>中第<n>個單詞。如果<n>比<text>中的單詞數要大,那么返回空
字符串。
示例:$(word 2, foo bar baz)返回值是“bar”。
$(wordlist <s>,<e>,<text> )

# Makefile 內容

all:

    @echo $(word 1,aa bb cc dd)

    @echo $(word 5,aa bb cc dd)

    @echo $(word 4,aa bb cc dd)

 

# bash 中執行 make

$ make

aa

 

dd

1.1.9        取單詞串函數wordlist

名稱:取單詞串函數——wordlist。
功能:從字符串<text>中取從<s>開始到<e>的單詞串。<s>和<e>是一個數字。
返回:返回字符串<text>中從<s>到<e>的單詞字串。如果<s>比<text>中的單詞數要大,那
么返回空字符串。如果<e>大於<text>的單詞數,那么返回從<s>開始,到<text>結束的單
詞串。
示例: $(wordlist 2, 3, foo bar baz)返回值是“bar baz”。

# Makefile 內容

all:

    @echo $(wordlist 1,3,aa bb cc dd)

    @echo $(word 5,6,aa bb cc dd)

    @echo $(word 2,5,aa bb cc dd)

 

 

# bash 中執行 make

$ make

aa bb cc

 

bb

1.1.10    單詞個數統計函數words

$(words <text> )
名稱:單詞個數統計函數——words。
功能:統計<text>中字符串中的單詞個數。
返回:返回<text>中的單詞數。
示例:$(words, foo bar baz)返回值是“3”。
備注:如果我們要取<text>中最后的一個單詞,我們可以這樣:$(word $(words <text>
),<text> )。

# Makefile 內容

 

all:

    @echo $(words aa bb cc dd)

    @echo $(words aabbccdd)

    @echo $(words )

 

# bash 中執行 make

$ make

4

1

0

1.1.11    首單詞函數firstword

$(firstword <text> )
名稱:首單詞函數——firstword。
功能:取字符串<text>中的第一個單詞。
返回:返回字符串<text>的第一個單詞。
示例:$(firstword foo bar)返回值是“foo”。
備注:這個函數可以用word函數來實現:$(word 1,<text> )。

小結:以上,是所有的字符串操作函數,如果搭配混合使用,可以完成比較復雜的功能。這里,舉一個現實中應用的例子。我們知道,make使用“VPATH”變量來指定“依賴文件”的搜索路徑。於是,我們可以利用這個搜索路徑來指定編譯器對頭文件的搜索路徑參數CFLAGS,
如將頭文件路徑的前面加上-I表示包含路徑:
override CFLAGS += $(patsubst %,-I%,$(subst :, ,$(VPATH)))
如果我們的“$(VPATH)”值是“src:../headers”,VPATH之間用分號{:}隔開,$(subst :, ,$(VPATH)) 先將路徑中的分號替換為空格src ../headers,然后模式替換函數$(patsubst %,-I%,)在每個路徑前面加上-I,表示包含文件路徑,生成 “-Isrc -I../headers”,這正是cc或gcc搜索頭文件路徑的參數。

 

 

自己編了一個股票監控軟件,有如下功能,有興趣的朋友可以下載;

(1)   個股監測。監測個股實時變化,可以監測個股大單交易、急速拉升和下降、主力入場和出場、股票最高點和最低點提醒。檢測到最高點、最低點、主力進場點、主力退場點、急速拉升點、急速下跌點,給出語音或者聲音提醒,不用再時刻看着大盤了,給你更多自由的時間;

(2)   大盤監測。監測大盤的走勢,采用上證、深證、創業三大指數的綜合指數作為大盤走勢。並實時監測大盤的最高點和最低點、中間的轉折點。

(3)   股票推薦。還能根據歷史數據長期或短期走勢進行分析,對股市3千多個股票進行分析對比,選出漲勢良好的股票,按照增長速度從大到小排序,推薦給你漲勢良好的股票;

下載地址:

1.0.3版本(修復大盤指數崩潰缺陷)下載地址:

鏈接:https://pan.baidu.com/s/1BJcTp-kdniM7VE9K5Kd3vg 提取碼:003h

更新鏈接:

https://www.cnblogs.com/bclshuai/p/10621613.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM