使通配符目标始终得到无所事事
make wildcard target always get Nothing to be done
我编写了一个 makefile,其中包含一些用于构建和 运行ning 的通配符目标。
我的 makefile 内容如下。
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)/$@")
我可以 运行 make some-program
成功,但是当我 运行 make some-program.exe
.
行 %: %.c
应该是 %.exe: %.c
,因为这是根据 .c
来源创建 .exe
文件的规则。
行 %.exe: %
应该是别的东西,例如run: foo.exe
.
最后,我的解决方法 makefile 如下。
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)
我编写了一个 makefile,其中包含一些用于构建和 运行ning 的通配符目标。 我的 makefile 内容如下。
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)/$@")
我可以 运行 make some-program
成功,但是当我 运行 make some-program.exe
.
行 %: %.c
应该是 %.exe: %.c
,因为这是根据 .c
来源创建 .exe
文件的规则。
行 %.exe: %
应该是别的东西,例如run: foo.exe
.
最后,我的解决方法 makefile 如下。
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)