.POSIX:

CC = c99
# Required as POSIX doesn't mandate that it is defined by default

OBJ =\
        alpha.o\
        beta.o\
        gamma.o

LINUX_AMD64_OBJ = $(OBJ:.o=.linux-amd64-o)
OPENBSD_AMD64_OBJ = $(OBJ:.o=.openbsd-amd64-o)

all: myproj-linux-amd64 myproj-openbsd-amd64

myproj-linux-amd64: $(LINUX_AMD64_OBJ)
        $(CC) -o $@ $(LINUX_AMD64_OBJ) $(LDFLAGS_LINUX_AMD64)

myproj-openbsd-amd64: $(OPENBSD_AMD64_OBJ)
        $(CC) -o $@ $(OPENBSD_AMD64_OBJ) $(LDFLAGS_OPENBSD_AMD64)

.c.linux-amd64-o:
        $(CC) -c -o $@ $< $(CFLAGS_LINUX_AMD64) $(CPPFLAGS_LINUX_AMD64) 

.c.openbsd-amd64-o:
        $(CC) -c -o $@ $< $(CFLAGS_OPENBSD_AMD64) $(CPPFLAGS_OPENBSD_AMD64) 

.SUFFIXES:
.SUFFIXES: .c .linux-amd64-o .openbsd-amd64-o

# NB! Cannot use .linux-amd64.o and .openbsd-amd64.o
#     as POSIX requires a dot at the beginning but
#     forbids any additional dot



On Sat, 1 Jan 2022 14:08:24 +0100
Ralph Eastwood <tcmreastw...@gmail.com> wrote:

> Hi Mattias,
> 
> Happy New Year!
> 
> > But I also like makel, but I will give it some more though before I  
> rename it a second time.
> 
> So... makellint? :D
> I like it; it seems 'makel' is unused as a project name.
> 
> Are there any suggestions for handling out-of-source builds using
> POSIX makefiles?  I recently had a project where we needed to
> support multiple platforms and so output-ing object files and binaries
> into platform-specific directories was needed.
> I know that GNU's pattern matching rules support this behaviour, i.e.:
> 
> $(OBJDIR)/%.o: $(SRCDIR)/%.c
>     $(CC) $(CFLAGS) -c $< -o $@
> 
> Perhaps just listing all of the object files and source +
> dependencies would be the easiest way in this instance?
> 
> Best regards,
> Ralph
> 
> --
> Tai Chi Minh Ralph Eastwood
> tcmreastw...@gmail.com
> 


Reply via email to