制作通配符目标总是无法完成任务

时间:2018-05-22 02:10:21

标签: windows gcc cmd makefile msys2

我写了一个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”无法执行任何操作。

2 个答案:

答案 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)