【问题标题】:One rule is not run on this Makefile一条规则未在此 Makefile 上运行
【发布时间】:2015-06-03 01:23:18
【问题描述】:

我在 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)
    ./$^

【问题讨论】:

    标签: c makefile mingw32 windows-xp-sp3


    【解决方案1】:

    通用规则不正确。对于 Gnu make,使用:

    %.o: %.c Makefile
        $(CC) $(CFLAGS) -c $<
    

    您还应该替换 all 目标(无需命令):

    all: $(Package)
    

    并将其放在任何其他目标规则之前,使其成为默认目标。

    我还建议您启用编译器警告以捕获常见的编程错误:

    CFLAGS=-O2 -Wall -Werror
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-30
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多