сделать подстановочный знак всегда получить ничего не нужно делать - PullRequest
0 голосов
/ 22 мая 2018

Я написал make-файл, который содержит какой-то подстановочный знак для сборки и запуска.Содержимое моего make-файла следующее:

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 голосов
/ 22 мая 2018

Наконец, мой обходной файл сборки выглядит следующим образом.

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) 
0 голосов
/ 22 мая 2018

Строка %: %.c должна быть %.exe: %.c, потому что это правило для создания файла .exe на основе источника .c.

Строка %.exe: % должна быть чем-то другим,например, run: foo.exe.

...