windows - gør wildcard mål altid få noget at gøre

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg skrev en makefile, som indeholder nogle wildcard mål for bygning og løb.
Mit makefile indhold er følgende.


ALL\_EXES=$(shell ls *.exe 2>/dev/null)
.PHONY:  all clean $(ALL\_EXES) foo

CC=gcc
CFLAGS=-g -Wall
GTKFLAGS=$(shell pkg-config --cflags gtk+-3.0)
GTKLIBS=$(shell pkg-config --libs gtk+-3.0)
PWD=$(shell pwd)

clean:
    @echo cleanning
    $(shell sh -c "rm *.exe 2>/dev/null")

\%: \%.c
    $(CC) $(GTKFLAGS) -o $@ $< $(GTKLIBS) $(CFLAGS) 

\%.exe: \%
    @echo running $@
    $(shell sh -c "$(PWD)/$@")


Jeg kan køre make some-program med succes, men intet der skal gøres for 'some-program.exe' sker altid, når jeg kører make some-program.exe.

Bedste reference


Linjen \%: \%.c skal være \%.exe: \%.c, fordi det er reglen om at oprette en .exe fil baseret på en .c kilde.


Linjen \%.exe: \% bør være noget andet, f.eks. run: foo.exe.

Andre referencer 1


Endelig er min løsnings makefile følgende.


ALL\_EXES=$(shell ls *.exe 2>/dev/null)
.PHONY:  all clean

CC=gcc
CFLAGS=-g -Wall
GTKFLAGS=$(shell pkg-config --cflags gtk+-3.0)
GTKLIBS=$(shell pkg-config --libs gtk+-3.0)
PWD=$(shell pwd)

clean:
    @echo cleanning $(shell ls *.exe 2>/dev/null)
    $(shell sh -c "rm *.exe 2>/dev/null")

\%.exe: \%.c
    @echo building $<
    $(CC) $(GTKFLAGS) -o $@ $< $(GTKLIBS) $(CFLAGS) 

run\_\%.exe: \%.exe
    @echo running $<
    $(PWD)/$<

example-stack.exe: example-stack.c stack.c
    $(CC) -I. -o $@ $^ $(CFLAGS)