make / makefile:意识到有一个新的(未更改的)源文件

时间:2013-08-07 14:02:35

标签: compilation makefile

通常我的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。

通常向后工作:对于每个目标,看看其中一个来源是否发生了变化,如果是这样的话。

我不想改变它,因为它是制作的全部要点,但是有一个例外。

问题是,当我创建一个新的 .c 文件时,目前还没有 .o 文件,因此(工作正常)从 .o 开始倒退,它甚至没有意识到有一个新的 .c

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

有更好的方法吗?提前致谢。

1 个答案:

答案 0 :(得分:3)

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

OBJS = main.o util.o something_else.o

在GNU Make中,您还可以使用the manual中所述的函数,根据.o制作.c列表:

OBJS := $(patsubst %.c,%.o,$(wildcard *.c))