1.常用的賦值運算符 === 1.1.「=」運算符用法 --- - make 會將整個 makefile 展開後,才決定變數的值。也就是說,==變數的值==會是整個 makefile 中==最後被指定的值== ```makefile user /home > ls makefile user /home > vim makefile x = hello y = $(x) world! x = hi all: @echo $(y) user /home > make all hi world! ``` 1.2.「:=」運算符用法 --- - ==最常用==。==變數的值==在 makefile ==展開途中就會被給定==,而不是整個 makefile 展開後的最终值 ```makefile user /home > ls makefile user /home > vim makefile x := hello y := $(x) world! x := hi all: @echo $(y) user /home > make all hello world! ``` 1.3.「+=」運算符用法 --- - ==較常用==。將值==附加到變數的後面== ```makefile user /home > ls makefile user /home > vim makefile x = hello y = $(x) world! x += hi all: @echo $(y) user /home > make all hello hi world! ``` 2.常用的萬用字元函數 === 2.1.wildcard 用法 --- - ==較常用==。==獲取檔案列表== ```makefile user /home > ls a.c b.c makefile sub user /home > ls ./home/sub sa.c sb.c user /home > vim makefile src0 = $(wildcard *.c) src1 = $(wildcard *.c ./sub/*.c) all: @echo $(src0) @echo $(src1) user /home > make all a.c b.c a.c b.c ./sub/sa.c ./sub/sb.c ``` 2.2.notdir 用法 --- - ==去除路徑== ```makefile user /home > ls a.c b.c makefile sub user /home > ls ./home/sub sa.c sb.c user /home > vim makefile src = $(wildcard *.c ./sub/*.c) dir = $(notdir $(src)) all: @echo $(dir) user /home > make all a.c b.c sa.c sb.c ``` 2.3.patsubst 用法 --- - ==替換字元== ```makefile user /home > ls a.c b.c makefile sub user /home > ls ./home/sub sa.c sb.c user /home > vim makefile src = $(wildcard *.c ./sub/*.c) dir = $(notdir $(src)) obj = $(patsubst %.c, %.o, $(dir)) all: @echo $(obj) user /home > make all a.o b.o sa.o sb.o ``` 2.4.filter-out 用法 --- - ==濾掉字元== ```makefile user /home > ls makefile user /home > vim makefile src = main1.o foo.o main2.o bar.o filter = main1.o main2.o dst = $(filter-out $(filter), $(src)) all: @echo $(dst) user /home > make all foo.o bar.o ``` 3.sed command === 3.1. sed -i 's/before_str/after_str/g' ./your_file --- - ==替換字串==。而碰到斜線時,前面要多加反斜線 ```makefile user /home > ls a.txt user /home > vim a.txt 1. 123 2. 456 3. 789 user /home > sed -i 's/123/456/g' ./a.txt user /home > vim a.txt 1. 456 2. 456 3. 789 user /home > sed -i 's/789/\/\/\//g' ./a.txt user /home > vim a.txt 1. 456 2. 456 3. /// ``` 3.2. sed -i 'a append_str' ./your_file --- - 對==指定行數==來==增添字串==。而碰到斜線時,前面要多加反斜線 ```makefile user /home > ls a.txt user /home > vim a.txt 1. 123 2. 456 3. 789 user /home > sed -i '1a 321' ./a.txt user /home > vim a.txt 1. 123 2. 321 3. 456 4. 789 user /home > sed -i 'a \/\/\/' ./a.txt user /home > vim a.txt 1. 123 2. 321 3. 456 4. 789 5. /// ``` 3.3. sed -i "/object_str/a\\append_str" ./your_file --- - 對==指定字串==來==增添字串==。而碰到斜線時,前面要多加反斜線 ```makefile user /home > ls dff.v user /home > vim dff.v 1. DFF_SYNC U_DFF( 2. .CLK (CLK), 3. .D (D), 4. .Q (Q)); user /home > sed -i 's/SYNC/ASYNC/g' ./dff.v user /home > sed -i "/DFF_SYNC U_DFF(/a\\ .RST (RST)," ./dff.v user /home > vim dff.v 1. DFF_ASYNC U_DFF( 2. .RST (RST), 3. .CLK (CLK), 4. .D (D), 5. .Q (Q)); ``` 4.test command === 4.1.test -e --- - 該==檔名是否存在== ```makefile user /home > ls a.c b user /home > test -e a.c && echo "exist" || echo "not exist" exist user /home > test -e b && echo "exist" || echo "not exist" exist ``` 4.2.test -f --- - 該檔名是否存在==且為檔案== ```makefile user /home > ls a.c b user /home > test -f a.c && echo "exist" || echo "not exist" exist user /home > test -f b && echo "exist" || echo "not exist" not exist ``` 4.3.test -d --- - 該檔名是否存在==且為資料夾== ```makefile user /home > ls a.c b user /home > test -d a.c && echo "exist" || echo "not exist" not exist user /home > test -d b && echo "exist" || echo "not exist" exist ```