Я пишу небольшую реализацию игры жизни Конвея в C. Исходный код разбит на три файла: main.c
и functions.c
/functions.h
, где я поставил свои функции определения и декларации.«make» не перекомпилируется, когда исходный файл был отредактирован.
Теперь, чтобы создать сетку клетки, у меня есть матрица этого типа:
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, он говорит, что все файлы обновлены! Я пытался скомпилировать, используя хороший ol 'путь 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', но вы не указали, что зависимость в make-файле – pmg
Если все это кажется слишком сложным, я бы рекомендовал [SCons] (http://scons.org) - ваш полный файл сборки будет одной строкой «Программа (« Игра жизни », [« main.c »,« functions.c »], LIBS = [« ncurses »]). SCons автоматически определяет зависимости файла заголовка в зависимости от сами источники, поэтому вам не нужно об этом думать. –