下面是一个makefile。请参阅%。c是目标的部分,其中一个依赖项是.psvn文件。我想这个make文件遍历每个psvn文件并为它生成一个.c文件。我如何更改makefile来执行此操作?
CC = gcc
CXX = g++
OPT = -g -Wall -O3 -Wno-unused-function -Wno-unused-variable -std=c++11
PSVNOPT = --no_state_map --no_abstraction --backwards_moves --history_len=0
psvn2c_core.c:
cp ../psvn2c_core.c ./psvn2c_core.c
psvn2c_state_map.c:
cp ../psvn2c_state_map.c ./psvn2c_state_map.c
psvn2c_abstraction.c:
cp ../psvn2c_abstraction.c ./psvn2c_abstraction.c
%.c: %.psvn psvn2c_core.c psvn2c_state_map.c psvn2c_abstraction.c
../psvn2c $(PSVNOPT) --name=$(*F) < $< > $@
rm -f ./psvn2c_core.c ./psvn2c_state_map.c ./psvn2c_abstraction.c
.PRECIOUS: %.c
%.succ: %.c succ.c
$(CC) $(OPT) succ.c -include $< -o $@
%.run: %.c run.cpp Node.cpp distribution.cpp
$(CXX) $(OPT) run.cpp Node.cpp distribution.cpp -include $< -o $@
.PHONY : clean
clean:
rm -f *.run *.o psvn2c_core.c psvn2c_state_map.c psvn2c_abstraction.c
答案 0 :(得分:1)
在第一个目标(psvn2c_core.c:
)之前添加类似的东西:
PSVN_FILES := $(wildcard *.psvn)
C_FILES := $(patsubst %.psvn,%.c,$(PSVN_FILES))
all: $(C_FILES)
完成。如果make all
(或make
以来all
将成为默认目标,因为它首先出现在makefile中),它将尝试构建所有.c
个文件。< / p>