我写了一个makefile,其中包含一些用于构建和运行的通配符目标。 我的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
时,“some-program.exe”无法执行任何操作。
答案 0 :(得分:1)
行%: %.c
应为%.exe: %.c
,因为这是基于.exe
来源创建.c
文件的规则。
行%.exe: %
应该是其他内容,例如run: foo.exe
。
答案 1 :(得分:1)
最后,我的解决方法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)