给出这个 Makefile,用于另一个项目:
OBJDIR = .objs
OUTFILE = simplesale
CFILES = \
manager.c \
zresources.c
UIFILES = \
addremovemoney.ui \
employeeeditor.ui \
itemeditor.ui \
logviewer.ui \
manager.ui \
othersettings.ui
HFILES = \
simplesale.h \
$(UIFILES:%.ui=z%.h)
OFILES = $(CFILES:%.c=$(OBJDIR)/%.o)
PKGS = gtk+-3.0
xCFLAGS = \
--std=c99 \
-Wall \
-Wextra \
-Wno-unused-parameter \
`pkg-config --cflags $(PKGS)` \
$(CFLAGS)
xLDFLAGS = \
`pkg-config --libs $(PKGS)` \
$(LDFLAGS)
$(OUTFILE): $(OFILES)
$(CC) -g -o $(OUTFILE) $(OFILES) $(xLDFLAGS)
$(OBJDIR)/%.o: %.c $(HFILES) dirs
$(CC) -g -o $@ -c $< $(xCFLAGS)
zresources.c: gresources.xml $(UIFILES)
glib-compile-resources --target $@ --generate-source $<
z%.h: %.ui
go run tools/ui2cdecl.go $< $@ /simplesale/$<
dirs:
mkdir -p $(OBJDIR)
clean:
rm -rf $(OBJDIR) z*
没有参数运行make
mkdir -p .objs
go run tools/ui2cdecl.go addremovemoney.ui zaddremovemoney.h /simplesale/addremovemoney.ui
go run tools/ui2cdecl.go employeeeditor.ui zemployeeeditor.h /simplesale/employeeeditor.ui
go run tools/ui2cdecl.go itemeditor.ui zitemeditor.h /simplesale/itemeditor.ui
go run tools/ui2cdecl.go logviewer.ui zlogviewer.h /simplesale/logviewer.ui
go run tools/ui2cdecl.go manager.ui zmanager.h /simplesale/manager.ui
go run tools/ui2cdecl.go othersettings.ui zothersettings.h /simplesale/othersettings.ui
cc -g -o .objs/manager.o -c manager.c --std=c99 -Wall -Wextra -Wno-unused-parameter `pkg-config --cflags gtk+-3.0`
glib-compile-resources --target zresources.c --generate-source gresources.xml
cc -g -o .objs/zresources.o -c zresources.c --std=c99 -Wall -Wextra -Wno-unused-parameter `pkg-config --cflags gtk+-3.0`
cc -g -o simplesale .objs/manager.o .objs/zresources.o `pkg-config --libs gtk+-3.0`
rm zaddremovemoney.h zothersettings.h zemployeeeditor.h zmanager.h zitemeditor.h zlogviewer.h
请注意GNU make如何决定在我的Makefile中添加一条规则,以删除从各种z%.h
文件生成的.ui
文件({{1以上规则)。
导致这种情况发生的隐含规则是什么?我试过z%.h: %.ui
,但没有发现任何相关内容。我知道我的make -p -f/dev/null
规则会删除这些文件;我明确只在明确clean
时删除它们。 (我开始对所有隐含的规则感到担忧......)
这是Ubuntu GNOME 14.10上的GNU make 4.0。
感谢。
答案 0 :(得分:1)