微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Makefile文件中转义冒号

有没有办法让GNU make使用包含冒号的文件名正确工作?

我碰到的具体问题恰好涉及一个模式规则。 这是一个简化的版本,不依赖于剪切和粘贴制表符:

% make --version GNU Make 3.81 copyright (C) 2006 Free Software Foundation,Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or fitness FOR A PARTIculaR PURPOSE. This program built for x86_64-redhat-linux-gnu % cat Makefile COLON := : all: ; true %.bar: ; cp $< $@ x.bar: x.foo %.foo: ; touch $@ a$(COLON)b.bar: a$(COLON)b.foo all: x.bar a$(COLON)b.bar clean: ; rm -f *.foo *.bar % make clean rm -f *.foo *.bar % make touch x.foo cp x.foo x.bar cp a:b.bar cp: missing destination file operand after `a:b.bar' Try `cp --help' for more @R_388_4045@ion. make: *** [a:b.bar] Error 1

文字replace$(COLON):产生完全相同的结果。 没有反斜杠,它是这样做的:

Makefile:6: *** target pattern contains no `%'. Stop.

“制作”子目录的首选方法

ldconfig错误:不是一个符号链接

automake子目录对象被禁用

<命令行>:1:1:错误:macros名称必须是标识符

Unix与Windows的GNU-Maketesting

有没有一个标准的方法来loggingGNU Make包中的依赖关系?

makefile – 转义括号

一般makefile目标为多个子目录中的目标文件

如何使GNU /停止取消引用到目录的符号链接

Windows在运行时删除使可执行文件。 为什么?

下面的黑客为我工作,但不幸的是依赖$(shell)。

# modify file names immediately PRE := $(shell rename : @COLON@ *) # example variables that I need XDLS = $(wildcard *.xdl) YYYS = $(patsubst %.xdl,%.yyy,$(XDLS)) # restore file names later POST = $(shell rename @COLON@ : *) wrapper: $(YYYS) @# restore file names $(POST) $(YYYS): @# show file names after $(PRE) renaming but before $(POST) renaming @ls

因为PRE被分配了:=,所以它的关联的shell命令在XDLS变量被计算之前运行。 关键是,然后通过显式调用$(POST)将冒号放回原处。

我怀疑这是可能的:请参阅关于Makefiles中冒号的讨论 。 总之,GNU make对于包含空格或冒号的文件名从来没有很好的处理过。 维护者Paul D. Smith说,增加对转义的支持将会破坏现有的makefile 。 此外,增加这种支持将需要对代码进行重大更改。

你可能能够解决某种令人讨厌的临时文件安排。

祝你好运!

处理Makefile变量定义文件名(包含冒号)时,今天还有另外一种方法

# deFinition SOME_FNAME = $(NAME)__colon__$(VERSION) # usage in target foo: $(do_something) $(subst __colon__,:,$(SOME_FNAME))

我不是积极的这应该工作,但它说“缺少目标文件”的原因很简单:

%.bar: ; cp $< $@

该行表示从第一个依赖复制目标。 你的a:b.bar没有任何依赖,所以cp失败。 你想拷贝什么? a:b.foo? 在这种情况下,您需要:

%.bar: %.foo ; cp $< $@

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐