makefile常見問題

1) Makefile:6: *** missing separator. Stop. 
   報出來Makefile的第6行有缺少分隔符問題. 打開Makefile文件,找到第6行,發現是該行的命令
頂行寫,沒有用Tab鍵隔離.
   第六行行首加一個Tab鍵後問題解決.   注: 在makefile中,命令行要以tab鍵開頭。
   可通過.RECIPEPREFIX來修改tab爲其他符號,如:
   .RECIPEPREFIX  = >
   all: 
   > echo $$pwd
2) = 和 :=的區別
   我們可以使用這兩個賦值符號用其它變量來給變量賦值。這兩個賦值符號的效果不同。
   對=符號,爲動態賦值。右側變量不一定非要是已定義好的值,其也可以使用後面定義的值。如:
   foo = $(bar)
   bar = aaa
   all:
       echo $(foo)
   命令make all將打印出aaa。

   “:=”爲靜態賦值,不能用在當前代碼之前還未定義的變量。如:
   foo := $(bar)
   bar := aaa
   all:
       echo $(foo)
   命令make all打印內容爲空。

3)make: *** cur-dir: command not found 問題
   以下代碼會導致如題的出錯信息。
   all:
   ifeq (0, ${MAKELEVEL})
        cur-dir := $(shell pwd)
   endif

   原因: all之後的必須是可執行命令,不能定義變量。變量的定義可以放在all的前面。如:

   ifeq (0, ${MAKELEVEL})
        cur-dir := $(shell pwd)
   endif
   all:
   ...
   也可以用define,如:
   ifeq (0, ${MAKELEVEL})
     define cur-dir
   $(shell pwd)
     endef
   endif
   all:
   ...  
   注意:endef前面用空格,不能用tab鍵,否則可能會報出找不到endef。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章