【发布时间】:2011-12-24 19:36:30
【问题描述】:
我正在用 C 语言编写康威生命游戏的小实现。源代码分为三个文件:main.c 和 functions.c/functions.h,我将函数定义和声明放在其中。
现在,要创建一个单元格网格,我有一个这种类型的矩阵:
Cell grid[GRID_HEIGHT][GRID_WIDTH];
其中GRID_HEIGHT 和GRID_WIDTH 是functions.h 中定义的常量:
#define GRID_HEIGHT 10
#define GRID_WIDTH 10
程序运行良好,使用 make 和 Makefile 编译。但问题是:如果我尝试更改 GRID_HEIGHT 或 GRID_WIDTH,当我再次运行我的 Makefile 时,它会说所有文件都是最新的!
我尝试使用良好的方式进行编译 gcc main.c etc. 并且它可以正常运行。那么,为什么make不重新编译源码呢?
这是我的 Makefile:
CC = gcc
OBJECTS = main.o functions.o
Game\ of\ Life : $(OBJECTS)
$(CC) $(OBJECTS) -o Game\ of\ Life -lncurses
%.o : %.c
$(CC) -c $<
【问题讨论】:
-
因为
main.o依赖于functions.h但您没有在 makefile 中指出该依赖关系 -
如果这一切看起来太复杂,我可能会推荐SCons - 你的完整构建文件将是单行
Program("Game Of Life", ["main.c", "functions.c"], LIBS=["ncurses"])SCons 会根据源本身自动确定头文件依赖关系,所以你不要'不必考虑。