我的主要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
任何人都知道问题是什么?
答案 0 :(得分:0)
您确定提供了确切的错误消息吗?你使用的是什么版本的make?这个错误看起来不像GNU make会打印的那样。
无论如何,我打赌问题是你对SOC
变量的赋值有尾随空格。根据{{1}}的POSIX定义,删除变量值之前的前导空格,但尾随空格保留。这意味着,例如,如果您编写这样的makefile:
make
然后make会删除评论,但保留空格,因此该值将为' SOC = versatile # this is the versatile SOC
' (最后的空间)。这意味着当您在versatile
行中展开该值时:
sinclude
使解释为尝试包含两个不同的值,第一个是目录。
即使您没有在那里发表评论,也会保留任何尾随空格。编辑makefile时,你应该尝试将编辑器置于一个标记尾随空格的模式,或者更好地自动删除它。例如,GNU Emacs就可以做到这一点。