pretty code

2023年12月28日 星期四

Some tips in Makefile - 001

今天開始接觸未來可能的工作流程,雖然只是練習用,但也算是有點感覺了。

主管還很貼心的提供了一個小測驗,由於我對 Tcl 或是 Makefile 都只是略懂,一開始先花點時間整理脈絡,直到看到主管說的關鍵字後,便開始主攻這個測驗。

雖然這個測驗有點像腦筋急轉彎?但在一步一步分解問題後,最後還是能找到解法,但我也花了一個小時多有,還好在吃飯前順利搞定。

簡單快速紀錄一下,今天學到的東西XD

01. Makefile 變數賦值

= 在使用到變數時展開。
:= 宣告變數時就展開。
?= 變數為空時才給值。
+= 將值附加到原本變數。

02. .DEFAULT_GOAL

如題,此變數為 GNU make 的一個特殊變數,有設定這個,假設 make 後面沒帶 target 就會以這個變數為主,而不是檔案中找到的第一個 target。

03. $$0 in awk command of Makefile

原本 awk 取原始字串是 $0,但在 Makefile 中 $ 有特殊用途,故在 awk 指令中,需要多加一個 $。

另外,如果想印出 $@,則應該要這樣寫 @echo \$$@。

04. env variable in Tcl

puts $::env(OS),此指令的意思是印出 OS 這個環境變數,env 本身是 array,array in Tcl 是關聯陣列。

05. call proc in some Tcl files.

source $::env(SCRIPTS_DIR)/report_metrics.tcl
report_metrics 6 "finish"

report_metrics.tcl 檔案中都是函數,這樣就可以呼叫該檔案裡面的 report_metrics 函數。

06. /usr/bin/time -f '%E %MKb' sleep 5

time 是用來記錄執行指令的時間,不同的 format 可以顯示不同的資訊,上面表示記錄 sleep 5 執行的時間及最大記憶體使用。

07. export QT_QPA_PLATFORM = offscreen,console 執行時就不會報錯。

08. $(shell command -v ls)

執行 command 查詢 ls 指令。

09. awk, mawk, gawk 三個是不同的程式

awk 'match($$0, pattern, array) 是錯的,因為這是 gawk 才有的語法,awk 有 match 但不能將 pattern 裡面抓到的 group 資訊存到 array。

沒有留言: