Re: [問題] makefile和script

看板Linux作者 (qqq)時間12年前 (2013/12/26 10:04), 編輯推噓1(106)
留言7則, 4人參與, 最新討論串3/3 (看更多)
您好: 拋磚引玉一下,請各位前輩指教。 http://en.wikipedia.org/wiki/Make_%28software%29#Rules 上面有提到,每次<tab>後面的command 都是啟動單獨的shell去執行 也就是說,有幾個commands就會跑幾次shell去執行這些commands 這樣表示,上面一行的command的狀態,變數等資訊都無法傳遞給下面的 commands。換句話說,目前的command和上面的狀態無關,因此會有 all: # 假設工作目錄在/workspace <tab>cd test1 # 切換到/workspace/test1目錄 <tab>./test # 目錄還在/workspace ./test出現錯誤的狀況 有興趣可以自己寫個實驗測一下就知道,如<tab>cd test1後下一行再 來個<tab>pwd 如果想要有狀態延續,我想到的有 1. 如您post提到,在Makefile直接執行shell script 2. 在一行command執行多個指令,您可以man bash再搜尋Compound Commands 或是Lists 3. 如果是要多個makefile共用設定,可以用include指令或是source一個變數 設定的script ※ 引述《gn00618777 (非常念舊)》之銘言: [Deleted] : makefile會一點,script語法會一點,但我整個就是搞不清楚啥時候用makefile : 啥時用script,看了同事他們的makefile,裡面會呼叫.sh也就是script來跑 : 我也不懂為何不能直接把這些一大串指令直接複製到makefile裡讓他跑。 [deleted] -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.227.237.203

12/26 10:23, , 1F
另外一個方式就是用export,
12/26 10:23, 1F

12/26 10:23, , 2F
這樣後面的process就可以認得那些變數了XD
12/26 10:23, 2F
要看export的時機 1. 在command line下make之前export變數上面的描述是正確的。 2. Makefile內export沒有效果,因為每個shell執行command之間是沒有關聯性。 可以做幾個測試: a. 開個終端機下VAR=TEST,再開另外一個終端機echo $VAR,或 b. 直接在Makefile 的command 加入export VAR=TEST,下一行echo $(VAR) - 延伸測試:提示符號下打 VAR=TEST_1 make 看看結果 研究一下結果

12/26 13:54, , 3F
原來如此啊~學到了 謝謝
12/26 13:54, 3F

12/26 16:37, , 4F
要在 Makefile 寫多行時,在行末加上 ; \ 即可
12/26 16:37, 4F

12/26 16:38, , 5F
也就是把它們塞成一行
12/26 16:38, 5F

12/26 16:39, , 6F
如:cd foo; do something...; ...; ... ← 寫成一行
12/26 16:39, 6F
這是list的一種方式,如果需要指令太多可以再使用\ 跳脫字元換行,只是要注意\後面 不可以有空白。 題外話:編輯器有支援highlight空白符號和<tab>對於編寫Makefile會有很大的幫助。 ※ 編輯: robinliao 來自: 61.227.237.203 (12/27 09:04) ※ 編輯: robinliao 來自: 61.227.237.203 (12/27 09:17)

12/29 22:33, , 7F
依據你的例子~ 最好的寫法是 cd test && ./test 即可
12/29 22:33, 7F
文章代碼(AID): #1IkuwSfN (Linux)
討論串 (同標題文章)
文章代碼(AID): #1IkuwSfN (Linux)