2017-05-07 52 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) 
    ...