2015-07-20 102 views
1

下面是一個makefile。請參閱%.c是目標的部分,其中一個依賴項是.psvn文件。我想這個make文件通過每個psvn文件併爲它生成一個.c文件。我將如何更改makefile來執行此操作?使文件夾中的每個文件都可執行的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) < $< > [email protected] 
    rm -f ./psvn2c_core.c ./psvn2c_state_map.c ./psvn2c_abstraction.c 

.PRECIOUS: %.c 

%.succ: %.c succ.c 
    $(CC) $(OPT) succ.c -include $< -o [email protected] 

%.run: %.c run.cpp Node.cpp distribution.cpp 
    $(CXX) $(OPT) run.cpp Node.cpp distribution.cpp -include $< -o [email protected] 

.PHONY : clean 
clean: 
    rm -f *.run *.o psvn2c_core.c psvn2c_state_map.c psvn2c_abstraction.c 
+0

使此特定規則成爲僅應用於子文件夾的模板。 –

回答

1

添加這樣的第一目標(psvn2c_core.c:)BEFORE:

PSVN_FILES := $(wildcard *.psvn) 
C_FILES := $(patsubst %.psvn,%.c,$(PSVN_FILES)) 

all: $(C_FILES) 

完成。當make all(或makeall將成爲默認目標,因爲它首先出現在makefile中)被調用時,它將嘗試構建所有.c文件。