2017-05-07 51 views
0

我正在爲具有多個模塊的應用程序編寫makefile(GNU make)。更準確地說,對於每個模塊,我有一個makefile。另外,我有一個調用每個模塊的makefile的主makefile。我一直試圖從這些makefile中分解出各處都需要的幾個變量。我已經包括了init.mk文件在主makefile文件用下面的開頭:生成文件條件失敗,已定義變量

export OS = linux 

ifeq ($(OS),linux) 
    export SHELL := /bin/bash 
else ifeq ($(OS),windows) 
    export SHELL := cmd 
else 
    export SHELL := 
endif 

當我運行make這一點,我得到一個錯誤127,因爲對比測試失敗,SHELL變量設置爲無。如果我在else部分中添加/bin/bash,make不會失敗。

爲什麼OS變量沒有正確比較?

問候

+0

製造手柄'在特殊SHELL'取決於操作系統的方式,在Windows上,它甚至可能[忽略任何你所說的](https://www.gnu.org/software/make/manual/make.html#Choosing-the-Shell)。 – user657267

+2

'export OS = linux'行的末尾是否有任何額外的空格? – MadScientist

+0

我有一個空間和評論 – BobMorane

回答

1

請變量賦值剝離前導空格,但是不剝離尾部空格:那些被包括在可變的值。

所以:

export OS = linux  
        ^^^^^ 

那裏有尾隨空白,單獨或與評論後,將導致變量包含空格。例如,上面的賦值OS的值是linux後跟5個空格,而不僅僅是linux

您可以一定要避免用手尾隨空白(使用具有模式編輯makefile文件是非常有幫助這裏的編輯器),或使用strip功能:

ifeq ($(strip $(OS)),linux) 
    ...