2013-11-21 31 views
1

我想運行在一個makefile下一行:

g++ -O2 -g -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -o "[email protected]" "$<" 

我想定義將包含所有的標誌變量:

FLAGS := -O2 -g -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" 

,然後使用這個變量而不是硬編碼線:

g++ $(FLAGS) -o "[email protected]" "$<" 

但是日的最後一部分上面的行(引用部分)會產生問題。
我的問題是我如何將此行分配給一個變量?我嘗試了各種逃生字符組合,但似乎沒有任何工作。

謝謝。

+0

運行make時命令行是否正確顯示?少了什麼東西? –

+0

這個問題指出你應該用反斜槓來避免雙引號。 http://stackoverflow.com/questions/17498327/gnu-make-variable-unexpected-token –

+0

@DidierTrosset當試圖用反斜槓轉義引號我得到g ++ -O2 -g -Wall -c -fmessage-length = 0 - MMD -MP -MF \「\」-o「 .o」「../ .cpp」 – eladm26

回答

0

問題來自FLAGS :=。實際上,使用:=運算符來設置FLAGS變量將指示make僅對變量的值進行一次評估,而對現在的值爲。但是,在定義FLAGS時,未定義變量@。它只會在具有g++命令的規則中定義。這就是爲什麼它會導致-MF""

您應該使用FLAGS=(無欄)。通過簡單的=定義,FLAGS變量僅在使用時進行評估,即在g++命令行中。在那個地方,[email protected]變量將被定義並且有效。

+0

謝謝你,它工作。 – eladm26