Makefile中的shell

來源:互聯網
上載者:User

一下摘錄Makefile中調用shell的一段

install:
        -if [ ! -e xxx ]; then sudo mkdir xxx; fi

注意,將上面的if語句寫到一行的話,必須在fi前面加上分號,否則會出現下面錯誤
unexpected end of file

下面轉一個相關文章

Makefile



Shell


的問題


 

大概只要知道
Makefile

的人,都知道
Makefile

可以調用
Shell

指令碼。但是在實際使用時,並不那麼簡單,一些模稜兩可的地方可能會讓你抓狂。你若不信,可以先看幾個例子,想象一下這些這些例子會列印什麼內容,記下你想象的結果,然後在電腦上運行這些例子,對照看一下。

 

 

樣本一:

if [ "$(BUILD)" = "debug" ]; then 
echo "build debug"; else echo "build release"; fi

all:

   
echo "done"

樣本二:

all:

   
@CC=arm-linux-gcc

   
@echo $(CC)

樣本三:

CC=arm-linux-gcc

all:

   
@echo $(CC)

樣本四:

SUBDIR=src example

all:

   
@for subdir in $(SUBDIR); /

   
do/

       
echo "building " $(subdir); /

   
done

 

 

說明:


1.
        

Shell


指令碼在
target

裡才有效,其它地方都被忽略掉了。所以樣本一中,
”build debug”

之類的字串根本列印不出來。樣本一的正確寫法是:

 

樣本一:

all:

   
if [ "$(BUILD)" = "debug" ]; then 
echo "build debug"; else echo "build release"; fi

   
echo "done"

 

2.
        

make


把每一行
Shell

指令碼當作一個獨立的單元,它們在單獨的進程中運行。樣本二中,兩行
Shell

指令碼在兩個莫不相干的進程裡運行,第一個進程把
CC

設定為
arm-linux-gcc

,第二個進程是不知道的,所以列印的結果自然不是
arm-linux-gcc

了。樣本二的正確寫法是:

 

樣本二:

all:

   
@CC=arm-linux-gcc; echo $(CC)

或者:

all:

@CC=arm-linux-gcc; /

echo $(CC)

 

3.
        

make


在調用
Shell

之前先進行預先處理,即展開所有
Makefile

的變數和函數。這些變數和函數都以
$

開頭。樣本三中,
Shell

拿的指令碼實際上是
echo arm-linux-gcc

,所以列印結果正確。

 

4.
        

make


預先處理時,所有以
$

開頭的,它都不會放過。要想引用
Shell

自己的變數,應該以
$$

開頭。另外要注意,
Shell

自己的變數是不需要括弧的。樣本四的正確寫法是:

 

樣本四:

SUBDIR=src example

all:

   
@for subdir in $(SUBDIR); /

   
do/

       
echo "building " $$subdir; /

   
done

感謝,Thanks!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.