不能在Makefile中使用变量

时间:2014-02-07 15:23:38

标签: makefile

我的主要Makefile调用config.mk

include $(TOPDIR)/config.mk

然后config.mk包含一些这样的句子:

ifdef CPU
sinclude $(TOPDIR)/cpu/$(CPU)/config.mk
endif

ifdef SOC
sinclude $(TOPDIR)/cpu/$(CPU)/$(SOC)/config.mk
endif

我准备了这两个树和必要的config.mks。但对于“SOC”,其价值是“多才多艺”,则存在问题。如果我直接在这里放“通用”,它可以找到文件,一切都很好;但是当我使用$(SOC)时,il会遇到错误,并说

/../../../cpu/arm926ejs/versatile: is a folder, stop

任何人都知道问题是什么?

1 个答案:

答案 0 :(得分:0)

您确定提供了确切的错误消息吗?你使用的是什么版本的make?这个错误看起来不像GNU make会打印的那样。

无论如何,我打赌问题是你对SOC变量的赋值有尾随空格。根据{{​​1}}的POSIX定义,删除变量值之前的前导空格,但尾随空格保留。这意味着,例如,如果您编写这样的makefile:

make

然后make会删除评论,但保留空格,因此该值将为' SOC = versatile # this is the versatile SOC ' (最后的空间)。这意味着当您在versatile行中展开该值时:

sinclude

使解释为尝试包含两个不同的值,第一个是目录。

即使您没有在那里发表评论,也会保留任何尾随空格。编辑makefile时,你应该尝试将编辑器置于一个标记尾随空格的模式,或者更好地自动删除它。例如,GNU Emacs就可以做到这一点。