- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个如下所示的 makefile:
m1:
@echo building m1
m1_:
@echo building m1_
m2:
@echo building m2
m2_:
@echo building m2_
m3_DEPS = m2 m1
SUBSTITUTE=$(patsubst %,%_,$($@_DEPS))
.SECONDEXPANSION:
#%: $$(SUBSTITUTE)
%: $$(patsubst \%,\%_,$$($$@_DEPS))
@echo Building $@
@echo Dependencies are $^
关键是
%: $$(patsubst \%,\%_,$$($$@_DEPS))
我同时使用模式规则和 patsubst,它本身使用百分号。我以为我可以用 \
转义 %
字符,但我仍然没有得到预期的行为。运行“make m3”给出输出
building m2
building m1
Building m3
Dependencies are m2 m1
但是,我希望得到
building m2_
building m1_
Building m3
Dependencies are m2_ m1_
注释掉该行并通过变量间接调用 patsubst
实际上会产生该输出。
SUBSTITUTE=$(patsubst %,%_,$($@_DEPS))
%: $$(SUBSTITUTE)
另外,我已经测试过使用非模式规则是有效的,这让我认为这与模式规则和百分号的交互有关:
m3: $$(patsubst %,%_,$$($$@_DEPS))
最佳答案
makefile 上下文中的
\
用于行继续,而不是“转义”。为了逃避一些事情,你可以将它们隐藏在变量中:
PERCENT := %
这个想法是,在解析 makefile 片段时转义字符有意义的地方,您对其进行转义。
因此,在您的情况下,您必须使用 $$(PERCENT)
:
$$(patsubst $$(PERCENT),$$(PERCENT)_,$$($$@_DEPS))
关于makefile - 在 GNU make 中使用模式规则和 patsubst 时如何正确转义 "%"符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19232784/
从docs: $(patsubst PATTERN,REPLACEMENT,TEXT) 在TEXT中找到与PATTERN和 将它们替换为REPLACEMENT。此处PATTERN可能包含% 用作通配符
我试图简化我的一些 makefile,我开始这样做: TEMP_OBJECTS_C = $(patsubst %.c,%.c.o,$(C_SOURCES)) TEMP_OBJECTS_CPP = $(
我有 3 个目录,想将一个可执行文件链接到库 我已经有了目录列表: DIRS=Math Graph Test 我想得到这样的库列表: LIBS=Math/libMath.a Graph/libGrap
为了使我的项目的目录结构更有条理,我想将相同模块的源文件放入单独的目录中。所有目标文件都应该放在 obj 目录中。我也不想在 obj 目录中复制源代码树,所以我正在寻找一种方法来从源文件中删除目录部分
我想为每个输入词生成两个输出词,它们是连续的,并对它们应用 patsubst。 我想要的非工作原型(prototype): $(patsubst %.o,%.a.o %.so.o,$(OBJ)) %
我试图弄清楚 .mk 文件中以下两行的含义 包含$(ROOTDIRECT)/target/$(MYSUBDIR)/defs.mk 包括 $(ROOTDIRECT)/target/$(dir $(pat
这是来自 GNU Make manual section on Secondary Expansion 的示例(稍微简化): foo_SRCS := bar.c baz.c .SECONDEXPANS
我目前正试图让我的 makefile 独立于我的文件夹结构。到目前为止,我使用的是一个包含所有 .cpp 文件的特定文件夹。我的 .o 文件都放在一个单独的 OBJ/文件夹中。但是,我现在希望我的 m
我的生成文件: compiler=g++ cflags=-g -Wall -I. src=$(shell find . -name *.cc) #find all .cc files, with pa
我正在尝试为我的项目编写一个 Makefile,所有 *.c 和 *.h 文件都在一个名为 src 的文件夹中>,Makefile 看起来像这样 -- CC := gcc C
作为测试套件的 make install 规则的一部分,我想将一个目录(src 目录)中的所有二进制可执行文件移动到 bin 目录。我认为一个简单的方法是简单地遍历 src 中的每个文件。目录,然后使
在我的 Makefile 中,我这样做: BINS = 1 2 3 4 然后 OBJS := $(patsubst %,%.o,$(BINS)) 打印:1.o 2.o 3.o 4.o 但我希望它看起来
我在 Windows 8 上使用 GNU make 来了解 makefile。我所指的教程是为 Linux 编写的,因此我正在更正据我所知给出的 makefile,例如用“\”等替换“/” 我的 ma
如何告诉 m4 的 patsubstr 将字符串中的所有换行符替换为空格? 我已经尝试过: patsubst(MULTI_LINE_STR_DEFINE,`\n',` ') 和 patsubst(MU
我有一个如下所示的 makefile: m1: @echo building m1 m1_: @echo building m1_ m2: @echo building m2
我需要在替换变量替换中两次引用词干: O23=$(OROOTS:%=$(ODIR)/overx-%2wk-%3wk.mlb) 我需要用相同的词干执行两次替换,但替换使用 patsubst只做第一个。我
我是一名优秀的程序员,十分优秀!