2012-07-07 122 views
2

我想了解makefile,主要是爲了瞭解我正在使用的makefile,但是我正在通過可能是簡單的東西引發。我的Makefile中混淆了我的部分是這樣的:與Makefile的混淆

SUBS = dir1 dir2 dir3 

depend clean: 
     @-X=`pwd`;\ 
     for i in $(SUBS);\ 
     cd $$X/$$i;\ 
     done 

什麼是「@ -X = pwd做我推測,它在某種程度上賦予本目錄X的值,但我不知道怎麼樣?閱讀「@ - 」語法

此外,爲什麼X &我需要前置'$$'而不是'$'?我已通過實驗驗證了兩個$都是必需的,但會認爲只需要一個人來替換他們的值

回答

3

我沒有想法如何閱讀「@ - 」語法。

只需從左到右閱讀:-)開玩笑,在行開頭的「@」表示在執行之前不要回顯行; 「 - 」告訴它忽略錯誤

X &我需要用'$$'而不是'$'作爲前綴嗎?

由於make本身具有通過$訪問的變量,但在這種情況下,該規則使用shell變量,該變量也可以通過$訪問。 $$只是一個轉義,所以執行的shell命令包含$ X,而不是makefile變量X的內容,該變量可能爲空。

+0

OK - 所以如果我理解正確,「X ='pwd'」會將當前工作目錄的值賦給X並打印出來。 「@ X ='pwd'」做同樣的事情,但是沒有給我一個標準輸出的評論。 「@ -X ='pwd'」有點多餘,因爲我沒有看到'pwd'導致許多錯誤。但爲什麼「X」與「SUBS」不同,後者需要訪問一個$? 「SUBS」是保留字嗎? – user1245262 2012-07-07 21:32:55

+0

堅持......我想我明白了。 SUBS只能通過make來讀取,所以它只需要一個$,但是X正在被shell讀取,所以它需要2 $,一個用於make和一個用於外殼..... – user1245262 2012-07-07 21:41:38

+0

打印isn不太正確,它不會打印pwd,它會打印傳遞給shell的整個命令行。關於變量:是的,shell中有「make」和變量。如果你看看這些行,你會發現它們都與\連接,所以它們實際上都在同一個shell中,因爲它只是一個大的shell命令行。這就是爲什麼它也可以使用shell變量。 – 2012-07-07 21:45:01