【问题】
遇到现象:
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。