使用makefile根据两个后缀规则处理文件

时间:2017-08-18 13:37:07

标签: makefile

我有一个docroot文件夹,其中包含需要构建的源文件 .usp - > 。所以 .htt - > html的

目前我的makefile有以下内容:     .SUFFIXES:.usp .htt

SOURCES = $(wildcard docroot/*.usp) $(wildcard docroot/*.htt)
OBJECTS = $(SOURCES:.usp=.so) $(SOURCES:.htt=.html)

all : ${OBJECTS}
.PHONY : all 

%.usp: %.so
    usp_compile_incl.sh -i ~/Projects/Concise-ILE/include $<

%.htt: %.html
    gpp -I~/Projects/Concise-ILE/include -C $< -o $@

.PHONY: clean
clean:
    rm -f docroot/*.so docroot/*.html

制作:***没有规则要制作'所有'所需的目标'docroot / fortune.so'。停止。

根据sauerburger的解决方案

.SUFFIXES: .usp .htt

SOURCES_USP  = $(wildcard docroot/*.usp)
SOURCES_HTT = $(wildcard docroot/*.htt)
OBJECTS = $(SOURCES_USP:.usp=.so) $(SOURCES_HTT:.htt=.html)

all : ${OBJECTS}
    .PHONY : all 

%.so: %.usp
    usp_compile_incl.sh -i ~/Projects/Concise-ILE/include $<

%.html: %.htt
    gpp -I~/Projects/Concise-ILE/include -C $< -o $@

1 个答案:

答案 0 :(得分:1)

.so.html的构建规则是错误的。这应该有效:

%.so: %.usp
    usp_compile_incl.sh -i ~/Projects/Concise-ILE/include $<

%.html: %.htt
    gpp -I~/Projects/Concise-ILE/include -C $< -o $@

规则的语法是TARGET: DEPENDENCIES

您还应该拆分源变量

SOURCES_USP  = $(wildcard docroot/*.usp)
SOURCES_HTT = $(wildcard docroot/*.htt)
OBJECTS = $(SOURCES_USP:.usp=.so) $(SOURCES_HTT:.htt=.html)

否则,您最终会得到一个混合对象列表。第一个替换文件还包括所有*.htt个文件,第二个文件包含所有*.ups个文件。