【整理】makefile中有个bug:#开头的注释的行末不能有空格加上反斜杠

【问题】

遇到现象:

makefile中内容是:

#http://docbook.sourceforge.net/release/xsl/1.78.1/doc/html/webhelp.base.dir.html
#if not set, default will be docs under current docbook book src directory
#XSLT_FLAGS_WEBHELP = $(XSLT_FLAGS_COMMON) \
XSLT_FLAGS_WEBHELP = \
    --stringparam webhelp.base.dir $(OUTPUT_DIR_WEBHELP) \
    --stringparam webhelp.indexer.language $(WEBHELP_INDEX_LANGUAGE)

test_webhelp:
	@echo $(XSLT_FLAGS_WEBHELP)
#	@echo $(WEBHELP_OTHER_XSLTPROC_ARGS)

结果测试内容是:

Administrator@PC-20130611GART /cygdrive/e/Dev_Root/docbook/dev/books/crifanlib_python/src
$ make test_webhelp

【折腾过程】

1.改为:

#http://docbook.sourceforge.net/release/xsl/1.78.1/doc/html/webhelp.base.dir.html
#if not set, default will be docs under current docbook book src directory
XSLT_FLAGS_WEBHELP = \
    --stringparam webhelp.base.dir $(OUTPUT_DIR_WEBHELP) \
    --stringparam webhelp.indexer.language $(WEBHELP_INDEX_LANGUAGE)

test_webhelp:
	@echo $(XSLT_FLAGS_WEBHELP)
#	@echo $(WEBHELP_OTHER_XSLTPROC_ARGS)

正常输出:

Administrator@PC-20130611GART /cygdrive/e/Dev_Root/docbook/dev/books/crifanlib_python/src
$ make test_webhelp
--stringparam webhelp.base.dir ../output/webhelp --stringparam webhelp.indexer.language zh

2.改为:

#http://docbook.sourceforge.net/release/xsl/1.78.1/doc/html/webhelp.base.dir.html
#if not set, default will be docs under current docbook book src directory
XSLT_FLAGS_WEBHELP = \
    --stringparam webhelp.base.dir $(OUTPUT_DIR_WEBHELP) \
    --stringparam webhelp.indexer.language $(WEBHELP_INDEX_LANGUAGE)

#XSLT_FLAGS_WEBHELP = $(XSLT_FLAGS_COMMON) \
test_webhelp:
	@echo $(XSLT_FLAGS_WEBHELP)
#	@echo $(WEBHELP_OTHER_XSLTPROC_ARGS)

结果错误:

Administrator@PC-20130611GART /cygdrive/e/Dev_Root/docbook/dev/books/crifanlib_python/src
$ make test_webhelp
../../../config/docbook.mk:328: *** recipe commences before first target。 停止。

3.最后推断出:

makefile中,默认是行尾,有空格加上反斜杠,表示换行继续新增内容

比如:

XSLT_FLAGS_WEBHELP = \
    --stringparam webhelp.base.dir $(OUTPUT_DIR_WEBHELP) \
    --stringparam webhelp.indexer.language $(WEBHELP_INDEX_LANGUAGE)

这个很常见,很好理解。

但是如果出现:

#开头的行,即都是注释的内容了。

但是如果行尾包含空格加上反斜杠

比如:

#XSLT_FLAGS_WEBHELP = $(XSLT_FLAGS_COMMON) \

makefile中,竟然也认为下一行是继续此注释的内容。。。

所以导致上述的:

#XSLT_FLAGS_WEBHELP = $(XSLT_FLAGS_COMMON) \
XSLT_FLAGS_WEBHELP = \
    --stringparam webhelp.base.dir $(OUTPUT_DIR_WEBHELP) \
    --stringparam webhelp.indexer.language $(WEBHELP_INDEX_LANGUAGE)

实际上是:

#XSLT_FLAGS_WEBHELP = $(XSLT_FLAGS_COMMON) XSLT_FLAGS_WEBHELP =     --stringparam webhelp.base.dir $(OUTPUT_DIR_WEBHELP)     --stringparam webhelp.indexer.language $(WEBHELP_INDEX_LANGUAGE)

全部变成注释了。

以及:

#XSLT_FLAGS_WEBHELP = $(XSLT_FLAGS_COMMON) \
test_webhelp:
	@echo $(XSLT_FLAGS_WEBHELP)
#	@echo $(WEBHELP_OTHER_XSLTPROC_ARGS)

变成:

#XSLT_FLAGS_WEBHELP = $(XSLT_FLAGS_COMMON) test_webhelp:
	@echo $(XSLT_FLAGS_WEBHELP)
#	@echo $(WEBHELP_OTHER_XSLTPROC_ARGS)

而出错了。

没有test_webhelp这个target的了。

 

【总结】

我的理解是:

如果以#开头,那么后面的内容,就是单行注释

空格加上反斜杠,表示内容继续的话,应该是对于注释不生效的,才对吧???

此处竟然也是生效的。。。

很是无语。

感觉应该是bug。



发表评论

电子邮件地址不会被公开。 必填项已用*标注

无觅相关文章插件,快速提升流量