一条规则不是 运行 在此 Makefile 上
One rule is not run on this Makefile
我运行正在 WinXP 中创建这个 makefile:
Package=killerapp
Sources=main.c
Resource=resource\resource.rc
Objs=$(Sources:.c=.o)
Res_obj=$(notdir $(Resource:.rc=.o))
CC_RES=windres
CC=gcc
CFLAGS=
LDFLAGS=-mwindows
%.o.c:
$(CC) $(CFLAGS) -c $<
$(Res_obj): $(Resource)
$(CC_RES) $< -o $@
$(Package): $(Objs) $(Res_obj)
$(CC) $(LDFLAGS) $^ -o $@
all:
$(MAKE) $(Package)
clean:
@del $(Objs)
@del $(Res_obj)
@del $(Package).exe
我的想法是先编译资源文件再编译源文件,但是好像只有windres是运行而且源文件没有编译,有什么想法吗?
更新 #1:按预期工作。
Package=killerapp
Sources=main.c
Resource=resource\resource.rc
Objs=$(Sources:.c=.o)
Res_obj=$(notdir $(Resource:.rc=.o))
CC_RES=windres
CC=gcc
CFLAGS=-O2 -Wall -Werror
LDFLAGS=-mwindows
all: $(Package)
%.o: %.c
$(CC) $(CFLAGS) -c $<
$(Res_obj): $(Resource)
$(CC_RES) $< -o $@
$(Package): $(Res_obj) $(Objs)
$(CC) $(LDFLAGS) $^ -o $@
clean:
@del $(Objs)
@del $(Res_obj)
@del $(Package).exe
run: $(Package)
./$^
通用规则不正确。对于 Gnu make,使用:
%.o: %.c Makefile
$(CC) $(CFLAGS) -c $<
您还应该替换 all
目标(不需要命令):
all: $(Package)
并将它放在任何其他目标规则之前,使其成为默认目标。
我还建议您启用编译器警告以捕获常见的编程错误:
CFLAGS=-O2 -Wall -Werror
我运行正在 WinXP 中创建这个 makefile:
Package=killerapp
Sources=main.c
Resource=resource\resource.rc
Objs=$(Sources:.c=.o)
Res_obj=$(notdir $(Resource:.rc=.o))
CC_RES=windres
CC=gcc
CFLAGS=
LDFLAGS=-mwindows
%.o.c:
$(CC) $(CFLAGS) -c $<
$(Res_obj): $(Resource)
$(CC_RES) $< -o $@
$(Package): $(Objs) $(Res_obj)
$(CC) $(LDFLAGS) $^ -o $@
all:
$(MAKE) $(Package)
clean:
@del $(Objs)
@del $(Res_obj)
@del $(Package).exe
我的想法是先编译资源文件再编译源文件,但是好像只有windres是运行而且源文件没有编译,有什么想法吗?
更新 #1:按预期工作。
Package=killerapp
Sources=main.c
Resource=resource\resource.rc
Objs=$(Sources:.c=.o)
Res_obj=$(notdir $(Resource:.rc=.o))
CC_RES=windres
CC=gcc
CFLAGS=-O2 -Wall -Werror
LDFLAGS=-mwindows
all: $(Package)
%.o: %.c
$(CC) $(CFLAGS) -c $<
$(Res_obj): $(Resource)
$(CC_RES) $< -o $@
$(Package): $(Res_obj) $(Objs)
$(CC) $(LDFLAGS) $^ -o $@
clean:
@del $(Objs)
@del $(Res_obj)
@del $(Package).exe
run: $(Package)
./$^
通用规则不正确。对于 Gnu make,使用:
%.o: %.c Makefile
$(CC) $(CFLAGS) -c $<
您还应该替换 all
目标(不需要命令):
all: $(Package)
并将它放在任何其他目标规则之前,使其成为默认目标。
我还建议您启用编译器警告以捕获常见的编程错误:
CFLAGS=-O2 -Wall -Werror