ArchNemSyS
ArchNemSyS

Reputation: 377

use a makefile for processing files according two Suffix Rules

I have a docroot folder containing source files that need to built .usp -> .so .htt -> .html

Currently my makefile has the following : .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

make: *** No rule to make target 'docroot/fortune.so', needed by 'all'. Stop.

SOLUTION as per 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 $@

Upvotes: 0

Views: 151

Answers (1)

sauerburger
sauerburger

Reputation: 5138

The build rules for .so and .html are the wrong way round. This should work:

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

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

The syntax of rules is TARGET: DEPENDENCIES.

You should also split the sources variable

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

Otherwise you end up with a mixed objects list. The first replacement would also include all *.htt files, and the second would include all *.ups files.

Upvotes: 1

Related Questions