1. 程式人生 > >在makefile中寫shell注意點

在makefile中寫shell注意點

1、在Makefile中只能在target中呼叫Shell指令碼,其他地方是不能輸出的。比如如下程式碼就是沒有任何輸出:

VAR="Hello"
echo "$VAR"

all:
   .....

以上程式碼任何時候都不會輸出,沒有在target內,如果上述程式碼改為如下:

VAR="Hello"

all:
    echo "$VAR"
    .....

以上程式碼,在make all的時候將會執行echo命令。

2、在Makefile中執行shell命令,一行建立一個程序來執行。這也是為什麼很多Makefile中有很多行的末尾都是“;  \”,以此來保證程式碼是一行而不是多行,這樣Makefile可以在一個程序中執行,例如:

SUBDIR=src example
all:
    @for subdir in $(SUBDIR); \
    do\
        echo "building "; \
    done

上述可以看出for迴圈中每行都是以”; \”結尾的。

3、Makefile中所有以$打頭的單詞都會被解釋成Makefile中的變數。如果你需要呼叫shell中的變數(或者正則表示式中錨定句位$),都需要加兩個$符號($$)。例項如下:

PATH="/data/"

all:
    echo ${PATH}
    echo $$PATH

例子中的第一個${PATH}引用的是Makefile中的變數,而不是shell中的PATH環境變數,後者引用的事Shell中的PATH環境變數。

     以上三點的是Makefile呼叫shell應該注意的地方,寫Makefile一定要注意。

相關推薦

makefileshell注意

1、在Makefile中只能在target中呼叫Shell指令碼,其他地方是不能輸出的。比如如下程式碼就是沒有任何輸出: VAR="Hello" echo "$VAR" all: ..... 以上程式碼任何時候都不會輸出,沒有在target內,如果上述程式碼改為如下: VAR="Hello" al

Makefileshell用法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

SQLServerGO的注意

轉自:https://www.2cto.com/database/201510/446088.html 如果只是執行一條語句,有沒有GO都一樣 如果多條語句之間用GO分隔開就不一樣了 每個被GO分隔的語句都是一個單獨的事務,一個語句執行失敗不會影響其它語句執行。 例如:

es6箭頭函式 注意

var aaabbb = 'kkkooo' setTimeout(()=>{ var aaaa = 'kkkk'; console.log(this) },1000); 因為據我瞭解,箭頭函式指向是建立時候上下文的this指向,所以天真的認為上述函式中在箭頭函式內部建立的變數

log4j2LevelRangeFilter的注意

LevelRangeFilter的注意點 在log4j2中,LevelRangeFilter的minLevel,maxLevel的配置是和log4j 1.x相反的;minLevel需要配置的是高級別,maxLevel配置的是低級別,如下: <LevelRangeFilter minLevel="fa

Swift開發遇到的注意(二)

這段時間開發專案的同時在看第三方庫Kingfisher的實現,感覺有一些東西也需要記錄和總結一下。 6. public private(set),public fileprivate(set) 這和weak一樣是變數的一種修飾,意思是該變數可以public訪

Makefile新增shell指令碼

Makefile中可以加入shell指令碼語言,但是編寫形式不一樣,Makefile中都是以行為單位的,所以必須將Makefile中的shell指令碼通過\ 連線成一行。 例如: if [ -d $(HISI_HOME)/src/sdk_modify/hidrv_v0A1/

Swift開發遇到的注意(一)

最近的專案是使用Swift進行的開發,在開發過程中,有一些東西和OC是不太一樣的,需要特別的注意,這裡也就簡單的介紹和記錄一下。 1. 單例模式 在OC中的單例模式一般都是使用dispatch_once來實現的,可是在Swift4中,該方法已經被廢棄,也

SharedPreference在使用過程有什麼注意

commit()和apply()的區別 返回值 apply()沒有返回值,而commit()返回boolean表明修改是否提交成功。 操作效率 apply()是將修改資料原子提交到記憶體, 而後非同步真正提交到硬體磁碟,。 而commi

Spring的@Value註解在建構函式應用的注意

在改造一個之前的SpringMVC專案,重新使用SpringBoot的架構。 有一個自定義屬性讀取的轉換過程,這裡記錄一下。 SpringMVC下的屬性讀取 專案使用MongoDB資料庫,直接使用MongoDB-Driver中的MongoClient進行程

關於ActiveMQ的一些注意和筆記

1.使用了連線池工廠的生產者 package com.imooc.jms; import java.util.Map; import java.util.Set; import java.util.concurrent.ExecutorService; import j

AJAXPOST請求注意(header頭)

在進行AJAX請求需要注意POST的區別 在我們進行AJAX請求的過程中,GET請求是簡單可行的.例如 xmlhttp.open("GET","test1.txt",true); xmlhttp.send(); 這是簡單可行的,我們需要把有用的資料拼接到

react的JSX注意

定義元件時,最外層必須有一個標籤進行包裹。例如:      /* 報錯 */ const component1 = <div>123</div><div></div> /* 正確 */ const component2 = &

C++ 字元替換注意,適合新手

直接上程式碼,注意char * 的定義和內容的初始化 void Replace(char *str, int nCount,char findChar, char replaceChar) {if (str==NULL) return;for (int i = 0; i&

java split方法的一些注意

今天用split方法分割一個類似”9580|9570|9571”的字串,用Arrays.asList將String[]轉成List,結果卻是這樣 [9,5,8,0,|,9,5,7,0,|,9,5,7,1] 列出幾個要點 首先java doc裡已經說明, s

makefileshell語法

1、在Makefile中只能在target中呼叫Shell指令碼,其他地方是不能輸出的。比如如下程式碼就是沒有任何輸出: VAR="Hello" echo "$(VAR)" all: ..... 以上程式碼任何時候都不會輸出,沒有在target內,如果上述程式碼改為如下: VAR="Hello"

Java筆記——switch語句使用Enum注意

當列舉型別用在switch語句中時,語法有一點點特別。看例子:/* * Copyright 2011 UDMS Project Zhejiang University */ package udms.core.utils; import sun.net.www.co

【AngularJS】使用ng-repeat$index的注意

發現問題 最近有客戶投訴,說在刪除指定的某條記錄時,結果刪掉的卻是另外一條記錄!看起來是個很嚴重的BUG。 有一次我們在工作中碰到了這個問題。 要定位這個BUG非常麻煩, 因為客戶也不清楚如何重現這個問題。 後來發現這個Bug是由於在 ng-repeat

轉:makefile裡面引用shell注意

  DIRS = src bin lib    all:     @for i in $(DIRS); /      do /          echo " " $$i; /      done    大家看出來了嗎? DIRS是makefile變數,i是shell變數, 使用的時候:    $(DIRS

makefileshell注意

1、在Makfile中shell變數需要使用$$來引用,而$(A)是Makefile的變數 test: for i in 1 2 3 4 5 ; \ do\ echo $$i ; \ #使用 $(i) 的話輸出不正確 done 2、mak