Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile:带空格的先决条件_Makefile_Gnu Make - Fatal编程技术网

Makefile:带空格的先决条件

Makefile:带空格的先决条件,makefile,gnu-make,Makefile,Gnu Make,更新:GNU Make 3.81,Ubuntu 12.04 我有一组标记文件,我想编译成(比如)html文件,所以这是我的规则: %.html: %.md pandoc $< -o $@ 如何在必备文件名有空格的地方编写通用规则%.html:%.md 我可以使用以下方法来解决此问题: foo\ bar.html: foo\ bar.md pandoc $< -o $@ foo\bar.html:foo\bar.md 潘多克$

更新:GNU Make 3.81,Ubuntu 12.04

我有一组标记文件,我想编译成(比如)html文件,所以这是我的规则:

%.html: %.md
    pandoc $< -o $@
如何在必备文件名有空格的地方编写通用规则
%.html:%.md

我可以使用以下方法来解决此问题:

foo\ bar.html: foo\ bar.md
    pandoc $< -o $@
foo\bar.html:foo\bar.md
潘多克$<-o$@
但是,当我更愿意使用
%
结构时,我必须为我拥有的每个这样的源文件手动写出这个规则。我唯一的希望是做一些
$(foreach f,$(获取*.md文件列表),$(eval$(调用函数生成规则))

编辑 显然make在推理规则中对空格的支持取决于您使用的GNU make的变体。它只是神奇地与Gentoo的补丁sys-devel/make-3.82-r4配合使用(与Gentoo的make 3.81-r2配合使用失败)。在快速检查make-3.82的变更日志、新闻或Gentoo补丁时,我没有注意到任何解释。因此,使用空格的隐式规则可能只是make-3.82本身的一个侥幸,甚至是Gentoo的补丁集。GNU对目标中空白的官方支持在“仍然开放”中进行跟踪

原始错误答案 您可以使用shell支持的任何引用字符<代码>生成在执行宏替换时忽略它们,并将它们直接传递给shell。比如说,

.SUFFIXES: .md .html
.md.html:
    pandoc "$(<)" > "$(@)"
这是用一个名为
a“b”c.md
的文件测试的,该文件成功地创建了
a“b”c.html
(免责声明:我使用了折扣的
降价
命令而不是pandoc)。

显然make在推理规则中对空格的支持取决于您使用的GNU make的变体。它只是神奇地与Gentoo的补丁sys-devel/make-3.82-r4配合使用(与Gentoo的make 3.81-r2配合使用失败)。在快速检查make-3.82的变更日志、新闻或Gentoo补丁时,我没有注意到任何解释。因此,使用空格的隐式规则可能只是make-3.82本身的一个侥幸,甚至是Gentoo的补丁集。GNU对目标中空白的官方支持在“仍然开放”中进行跟踪

原始错误答案 您可以使用shell支持的任何引用字符<代码>生成在执行宏替换时忽略它们,并将它们直接传递给shell。比如说,

.SUFFIXES: .md .html
.md.html:
    pandoc "$(<)" > "$(@)"
这是用一个名为
a“b”c.md
的文件测试的,该文件成功地创建了
a“b”c.html
(免责声明:我使用了折扣的
降价
命令而不是pandoc)。

显然make在推理规则中对空格的支持取决于您使用的GNU make的变体。它只是神奇地与Gentoo的补丁sys-devel/make-3.82-r4配合使用(与Gentoo的make 3.81-r2配合使用失败)。在快速检查make-3.82的变更日志、新闻或Gentoo补丁时,我没有注意到任何解释。因此,使用空格的隐式规则可能只是make-3.82本身的一个侥幸,甚至是Gentoo的补丁集。GNU对目标中空白的官方支持在“仍然开放”中进行跟踪

原始错误答案 您可以使用shell支持的任何引用字符<代码>生成在执行宏替换时忽略它们,并将它们直接传递给shell。比如说,

.SUFFIXES: .md .html
.md.html:
    pandoc "$(<)" > "$(@)"
这是用一个名为
a“b”c.md
的文件测试的,该文件成功地创建了
a“b”c.html
(免责声明:我使用了折扣的
降价
命令而不是pandoc)。

显然make在推理规则中对空格的支持取决于您使用的GNU make的变体。它只是神奇地与Gentoo的补丁sys-devel/make-3.82-r4配合使用(与Gentoo的make 3.81-r2配合使用失败)。在快速检查make-3.82的变更日志、新闻或Gentoo补丁时,我没有注意到任何解释。因此,使用空格的隐式规则可能只是make-3.82本身的一个侥幸,甚至是Gentoo的补丁集。GNU对目标中空白的官方支持在“仍然开放”中进行跟踪

原始错误答案 您可以使用shell支持的任何引用字符<代码>生成在执行宏替换时忽略它们,并将它们直接传递给shell。比如说,

.SUFFIXES: .md .html
.md.html:
    pandoc "$(<)" > "$(@)"

这是用一个名为
a“b”c.md
的文件测试的,该文件成功地创建了
a“b”c.html
(免责声明:我使用了折扣的
markdown
命令而不是pandoc)。

从@binki的说法来看,GNU make 3.82可能没有这个问题,但不幸的是,我没有从我的Ubuntu12.04机器上的v3.81更新的选项

我通过使用SECONDEXPANSION在前提条件中用反斜杠替换空格来“解决”它(因此
foo bar.md
的前提条件变成
foo\bar.md

#使用单个空格定义变量
空间:=
空间+=
.第二次扩展:
%.html:$$(subst$$(空格),\$$(空格),%).md

pandoc“$从@binki的说法来看,GNU make 3.82可能没有这个问题,但不幸的是,我没有从我的Ubuntu 12.04机器上的v3.81更新的选项

我通过使用SECONDEXPANSION在前提条件中用反斜杠替换空格来“解决”它(因此
foo bar.md
的前提条件变成
foo\bar.md

#使用单个空格定义变量
空间:=
空间+=
.第二次扩展:
%.html:$$(subst$$(空格),\$$(空格),%).md

pandoc“$从@binki的说法来看,GNU make 3.82可能没有这个问题,但不幸的是,我没有从我的Ubuntu 12.04机器上的v3.81更新的选项

我通过使用SECONDEXPANSION在前提条件中用反斜杠替换空格来“解决”它(因此
foo bar.md
的前提条件变成
foo\bar.md

#定义