例如,来自变量:
files = dirx/a.cc diry/b.cc dirz/b.cc
我想有效地制定这些规则:(不依赖于定义/评估)
a_a.o: dirx/a.cc
b_b.o: diry/b.cc
c_c.o: dirz/c.cc
答案 0 :(得分:0)
问题似乎不太可能,但这个makefile可以满足您的需求:
<强>生成文件强>
VPATH := dirx:diry:dirz
SRCS := a.cc b.cc c.cc
OBJS := $(foreach src,$(SRCS),$(basename $(src))_$(basename $(src)).o)
.PHONY: all clean
.SECONDEXPANSION:
%.o: $$(basename $$(subst _,.,$$*)).cc
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<
all: $(OBJS)
clean:
rm -f $(OBJS)
根据您的示例设置目录和文件:
$ ls -R
.:
dirx diry dirz Makefile
./dirx:
a.cc
./diry:
b.cc
./dirz:
c.cc
它的运行方式如下:
$ make
g++ -c -o a_a.o dirx/a.cc
g++ -c -o b_b.o diry/b.cc
g++ -c -o c_c.o dirz/c.cc
婴儿床: -