【问题】
在折腾makefile,写了个脚本用于实现自动编译docbook,用xsltproc+fop去生成pdf,期间遇到个很奇怪的,关于makefile无法赋值的问题。
如下方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #using tools XSLT = xsltproc XSLT_FLAGS_COMMON = --xinclude #XSLT_FLAGS_FO = $(XSLT_FLAGS_COMMON) \ # --stringparam callout.graphics $(CFG_CALLOUT_GRAPHICS) \ # --stringparam admon.graphics $(CFG_FO_ADMON_GRAPHICS) \ # --stringparam admon.graphics.path $(ADMON_GRAPHICS_PATH) \ #XSLT_FLAGS_FO = $(XSLT_FLAGS_COMMON) # callout settings XSLT_FLAGS_FO = --stringparam callout.graphics $(CFG_CALLOUT_GRAPHICS) ifeq ($(CFG_CALLOUT_GRAPHICS), 1) XSLT_FLAGS_FO += --stringparam callout.graphics.path $(CALLOUT_IMG_PATH_LOCAL) XSLT_FLAGS_FO += --stringparam callout.graphics.number.limit $(CALLOUT_NUM_LIMIT) endif # admon settings XSLT_FLAGS_FO += --stringparam admon.graphics $(CFG_FO_ADMON_GRAPHICS) ifeq ($(CFG_FO_ADMON_GRAPHICS), 1) XSLT_FLAGS_FO += --stringparam admon.graphics.extension $(FO_ADMON_GRAPHICS_EXTENSION) XSLT_FLAGS_FO += --stringparam admon.graphics.path $(FO_ADMON_GRAPHICS_PATH_LOCAL) endif XSLT_FLAGS_FO += $(XSLT_FLAGS_COMMON) ################################################################################ # fo ################################################################################ $(OUTPUT_FILE_PO):$(MAIN_SRC_FILE) $(SUB_SRC_FILES) @ echo "=============================== generating fo ==============================" export XML_CATALOG_FILES= "$(XML_CATALOG_FILES)" && \ export XML_DEBUG_CATALOG=1 && \ $(XSLT) $(XSLT_FLAGS_FO) -o $@ $(XSL_NS_FILE_FO) $< |
是可以正常实现对于XSLT_FLAGS_FO变量的赋值的,对应的脚本执行结果中,–xinclude能通过XSLT_FLAGS_COMMON传递给XSLT_FLAGS_FO:
1 | xsltproc --stringparam callout.graphics 1 --stringparam callout.graphics.path D: /tmp/tmp_dev_root/cgwin/home/CLi/develop/docbook/config/images/system/callouts/ --stringparam callout.graphics.number.limit 30 --stringparam admon.graphics 1 --stringparam admon.graphics.extension .svg --stringparam admon.graphics.path D: /tmp/tmp_dev_root/cgwin/home/CLi/develop/docbook/config/images/system/colorsvg/ --xinclude -o .. /output/fo/nand_get_type .fo docbook_fo_crl.xsl nand_get_type.xml |
但是对于按照正常逻辑,去这么写:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #using tools XSLT = xsltproc XSLT_FLAGS_COMMON = --xinclude #XSLT_FLAGS_FO = $(XSLT_FLAGS_COMMON) \ # --stringparam callout.graphics $(CFG_CALLOUT_GRAPHICS) \ # --stringparam admon.graphics $(CFG_FO_ADMON_GRAPHICS) \ # --stringparam admon.graphics.path $(ADMON_GRAPHICS_PATH) \ XSLT_FLAGS_FO = $(XSLT_FLAGS_COMMON) # callout settings XSLT_FLAGS_FO += --stringparam callout.graphics $(CFG_CALLOUT_GRAPHICS) ifeq ($(CFG_CALLOUT_GRAPHICS), 1) XSLT_FLAGS_FO += --stringparam callout.graphics.path $(CALLOUT_IMG_PATH_LOCAL) XSLT_FLAGS_FO += --stringparam callout.graphics.number.limit $(CALLOUT_NUM_LIMIT) endif # admon settings XSLT_FLAGS_FO += --stringparam admon.graphics $(CFG_FO_ADMON_GRAPHICS) ifeq ($(CFG_FO_ADMON_GRAPHICS), 1) XSLT_FLAGS_FO += --stringparam admon.graphics.extension $(FO_ADMON_GRAPHICS_EXTENSION) XSLT_FLAGS_FO += --stringparam admon.graphics.path $(FO_ADMON_GRAPHICS_PATH_LOCAL) endif #XSLT_FLAGS_FO += $(XSLT_FLAGS_COMMON) ################################################################################ # fo ################################################################################ $(OUTPUT_FILE_PO):$(MAIN_SRC_FILE) $(SUB_SRC_FILES) @ echo "=============================== generating fo ==============================" export XML_CATALOG_FILES= "$(XML_CATALOG_FILES)" && \ export XML_DEBUG_CATALOG=1 && \ $(XSLT) $(XSLT_FLAGS_FO) -o $@ $(XSL_NS_FILE_FO) $< |
结果–xinclude就无法传递给XSLT_FLAGS_FO了,结果变成:
1 | xsltproc --stringparam callout.graphics 1 --stringparam callout.graphics.path D: /tmp/tmp_dev_root/cgwin/home/CLi/develop/docbook/config/images/system/callouts/ --stringparam callout.graphics.number.limit 30 --stringparam admon.graphics 1 --stringparam admon.graphics.extension .svg --stringparam admon.graphics.path D: /tmp/tmp_dev_root/cgwin/home/CLi/develop/docbook/config/images/system/colorsvg/ -o .. /output/fo/nand_get_type .fo docbook_fo_crl.xsl nand_get_type.xml |
然后就导致之前就遇到过的错误:
1 | Element include in namespace 'http://www.w3.org/2001/XInclude' encountered in book, but no template matches. |
了。搞得很是无语。
【解决过程】
1.后来试了另外一种写法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #using tools XSLT = xsltproc XSLT_FLAGS_COMMON = --xinclude XSLT_FLAGS_FO = $(XSLT_FLAGS_COMMON) \ --stringparam callout.graphics $(CFG_CALLOUT_GRAPHICS) \ --stringparam admon.graphics $(CFG_FO_ADMON_GRAPHICS) \ # --stringparam admon.graphics.path $(ADMON_GRAPHICS_PATH) \ #XSLT_FLAGS_FO = $(XSLT_FLAGS_COMMON) # callout settings #XSLT_FLAGS_FO = --stringparam callout.graphics $(CFG_CALLOUT_GRAPHICS) ifeq ($(CFG_CALLOUT_GRAPHICS), 1) XSLT_FLAGS_FO += --stringparam callout.graphics.path $(CALLOUT_IMG_PATH_LOCAL) XSLT_FLAGS_FO += --stringparam callout.graphics.number.limit $(CALLOUT_NUM_LIMIT) endif # admon settings #XSLT_FLAGS_FO += --stringparam admon.graphics $(CFG_FO_ADMON_GRAPHICS) ifeq ($(CFG_FO_ADMON_GRAPHICS), 1) XSLT_FLAGS_FO += --stringparam admon.graphics.extension $(FO_ADMON_GRAPHICS_EXTENSION) XSLT_FLAGS_FO += --stringparam admon.graphics.path $(FO_ADMON_GRAPHICS_PATH_LOCAL) endif #XSLT_FLAGS_FO += $(XSLT_FLAGS_COMMON) ################################################################################ # fo ################################################################################ $(OUTPUT_FILE_PO):$(MAIN_SRC_FILE) $(SUB_SRC_FILES) @ echo "=============================== generating fo ==============================" export XML_CATALOG_FILES= "$(XML_CATALOG_FILES)" && \ export XML_DEBUG_CATALOG=1 && \ $(XSLT) $(XSLT_FLAGS_FO) -o $@ $(XSL_NS_FILE_FO) $< |
则也是可以正常地实现将–xinclude传递给XSLT_FLAGS_FO的:
1 | xsltproc --xinclude --stringparam callout.graphics 1 --stringparam admon.graphics 1 --stringparam callout.graphics.path D: /tmp/tmp_dev_root/cgwin/home/CLi/develop/docbook/config/images/system/callouts/ --stringparam callout.graphics.number.limit 30 --stringparam admon.graphics.extension .svg --stringparam admon.graphics.path D: /tmp/tmp_dev_root/cgwin/home/CLi/develop/docbook/config/images/system/colorsvg/ -o .. /output/fo/nand_get_type .fo docbook_fo_crl.xsl nand_get_type.xml |
但是对于开始直接用:
XSLT_FLAGS_FO = $(XSLT_FLAGS_COMMON)
却无法实现参数赋值,还是没搞懂是啥原因。觉得很是诡异。不符合常理。
期待有高人指点指点。
转载请注明:在路上 » 【未搞懂】makefile中无法赋值