2024年9月13日 星期五

十三號星期五

這個星期都在跟某個 EDA 奮戰,明明照著文件下了幾個 debug command,結果都不符預期!連想要透過 check point 存檔進入 GUI mode 也無法隨心所欲。

還好我沒聽文件在唬爛,使用快失效 command 的 session 指令存檔進入 GUI mode 以避免重複執行的等待時間。

由於之前還不知道有這兩個 command,所以這星期至少打了 10 幾次 make 有,打久了對 make 每次都有 Error 也不免感到困惑?

原本以為是不是因為 makefile 是從別人的專案來的,故裡面有地方沒有用到 tab 字元?後來拿掉沒用的 target 後情況依舊,我才恍然大悟跟 makefile 本身無關。

網路上查了一下,那是 make 在執行指令時指令本身回傳的,也就是 EDA tool 回傳的。

剛寫了個測試程式試了一下,果然是這樣沒錯,現在只差不清楚為什麼 $? 永遠回傳 2 就是了?

以我的例子來說,make test 執行我的 test_make 時,因為不是回傳 0,故其實 make 也不會往下執行了,因此為了避免 make 不如預期浪費時間,畢竟 EDA 隨便都要跑一個小時以上,我的建議是在 makefile 要執行的指令前一律加上 -@,另外在 makefile 裡面要印出 $?,記得要變成 $$?

- ignore error
@ not display command


2024/09/14 更新

早上不死心繼續 Google 了一下,看到一篇之前就看過的文章,先前可能被 EDA 搞得很累,沒有很認真看那篇文章,但至少是從那篇文章知道 Error Code 是從指令來的。

原來 $? 之所以永遠回傳 2,那是因為對 GNU make 來說,這就表示 make 執行其他指令時有問題,故 make 遇到有錯一律會回傳 2

所以在執行 Shell Script 時,我們只需要關心 return code  是不是 0 就好了。

當然如果你的 Makefile 是在編譯執行檔,Error Code 還是多少有點用處,不過除錯這件事嗎,只能 case by case,沒有一個放諸四海皆準的道理。

另外,昨天建議加上 -@,睡過覺起來覺得似乎也不太對,約耳說,要讓錯出現在錯的地方,忽略它繼續往下走,其實也沒什麼幫助就是。

沒有留言:

張貼留言