windows - gør wildcard mål altid få noget at gøre
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)