Makefile具有自动依赖性

时间:2015-08-25 15:39:11

标签: c makefile

假设我们有以下设置:

prog.c中

#include <stdio.h>

#include "prog.h"

int main(){
        printf("%s\n", HELLO);

        return 0;
}

prog.h

#ifndef _PROG_H
#define _PROG_H

#define HELLO "hello world"

#endif

生成文件

(注意我简化了Makefile以使问题更加明显)

MYCC    = gcc

CC      = $(MYCC) -MMD -MP -c

LINK    = $(MYCC) -o

TARGETS = prog

all:    $(TARGETS)

clean:
        rm -f *.o *.d $(TARGETS)

prog: prog.o
        $(LINK) $@ $^

%.o: %.c
        $(CC) $<

-include $(SRC:%.c=%.d)

这个makefile假设在首次运行后自动创建依赖项(* .d文件)。

但是出了点问题,因为如果我更改.h文件,它根本不会重建项目。

[nmmm@zenbook ctest]$ make
gcc -MMD -MP -c prog.c
gcc -o prog prog.o
[nmmm@zenbook ctest]$ ./prog 
hello world
[nmmm@zenbook ctest]$ touch prog.c 
[nmmm@zenbook ctest]$ make
gcc -MMD -MP -c prog.c
gcc -o prog prog.o
[nmmm@zenbook ctest]$ touch prog.h
[nmmm@zenbook ctest]$ make    << here is the problem
make: Nothing to be done for 'all'.

prog.d看起来不错。

我做错了什么?

1 个答案:

答案 0 :(得分:6)

你永远不会在任何地方真正定义SRC。如果您明确设置它:

SRC = prog.c

或使用通配符:

SRC = $(wildcard *.c)

然后一切都适合我。