3

一般来说,我的 makefile 有效。既然有人会问,这里供参考:

HEADERS = *.h
OBJS =  *.o
MYFORWARDS = *.c
WARNS = -Wall
CC = gcc
CFLAGS = -mwindows -Wall 
LDFLAGS = -mwindows -lkernel32 -luser32
all : my.exe
my.exe : ${OBJS}
    ${CC} -o "$@" ${OBJS} ${LDFLAGS}
%.o : %.c ${HEADERS}
    ${CC} ${CFLAGS} -c $< -o $@

我喜欢这样*.o*.c所以每次添加.c时我都不必编辑 makefile 。

Make通常向后工作:对于每个目标,看看它的一个来源是否发生了变化,如果是,则重建。

我不想改变这一点,因为这是 make 的全部意义,但是有一个例外。

问题是,当我创建一个新的.c文件时,还没有.o文件,因此(从.o向后工作)它甚至没有意识到有一个新的.c

到目前为止,我所做的是每次创建新的.c时,我都会手动创建新的.o文件。

有没有更好的办法?提前致谢。

4

1 回答 1

3

一种常见的方法是列出您的目标文件,而不是依赖通配符。

OBJS = main.o util.o something_else.o

在 GNU Make 中,您还可以使用手册中所述的函数来制作.o基于以下内容的列表.c

OBJS := $(patsubst %.c,%.o,$(wildcard *.c))
于 2013-08-07T14:09:44.430 回答