Как дела с компиляцией и компоновкой?Вам нужно будет указать оба файла, что-то вроде:
gcc testpoint.c point.c
... чтобы он знал, как связать функции из обоих вместе.Однако, если код написан прямо сейчас, вы столкнетесь с противоположной проблемой: множественные определения main
.Вам нужно / нужно устранить один (несомненно, тот, что в point.c).
В более крупной программе вы обычно компилируете и ссылаетесь отдельно, чтобы избежать повторной компиляции всего, что не изменилось.Обычно вы указываете, что нужно сделать через make-файл, и используете make
для выполнения работы.В этом случае у вас будет что-то вроде этого:
OBJS=testpoint.o point.o
testpoint.exe: $(OBJS)
gcc $(OJBS)
Первый - это просто макрос для имен объектных файлов.Вы получаете это расширенным $(OBJS)
.Второе - правило, сообщающее make 1), что исполняемый файл зависит от объектных файлов, и 2) указание, как создать исполняемый файл, если / если он устарел по сравнению с объектным файлом.
Большинство версийв make (включая тот, что в MinGW, я уверен), есть встроенное «неявное правило», которое говорит им, как создать объектный файл из исходного файла на языке Си.Обычно это выглядит примерно так:
.c.o:
$(CC) -c $(CFLAGS) $<
Предполагается, что имя компилятора C находится в макросе с именем CC (неявно определенным как CC=gcc
) и позволяет вам указать любые флаги, которые вам нужны вмакрос с именем CFLAGS
(например, CFLAGS=-O3
для включения оптимизации) и $<
- это специальный макрос, который расширяется до имени исходного файла.
Обычно его хранят в файле с именем Makefile
, и для сборки вашей программы вы просто набираете make
в командной строке.Он неявно ищет файл с именем Makefile
и выполняет все содержащиеся в нем правила.
Хорошая точка зрения в том, что make
автоматически просматривает временные метки на файлах, поэтому он будет перекомпилирован толькофайлы, которые изменились с момента их последней компиляции (т. е. файлы, в которых файл «.c» имеет более позднюю отметку времени, чем соответствующий файл «.o»).
Также обратите внимание, что 1) есть много вариантов использования make, когда речь идет о больших проектах, и 2) есть также много альтернативных вариантов.Здесь я получил только минимум рекордов.