С Makefile?: команда компоновщика не выполнена с кодом выхода 1 - PullRequest
0 голосов
/ 22 ноября 2018

Я изо всех сил пытался создать файл make ... В моей папке у меня есть

main.c mix.c mix.h Makefile

Что я должен написать в файле makefile, чтобы скомпилировать так:

gcc -Wall -Wextra -Werror -std=c99 -O1 -o main *.c

и протестируйте мой код, используя

./main

Я скопировал make-файл, но он выдает мне эту ошибку:

Undefined symbols for architecture x86_64:
"_mix", referenced from:
  _main in main-d5c713.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see 
invocation)
make: *** [main] Error 1

Это мой make-файл

CC=gcc
CPPFLAGS= -MMD
CFLAGS= -Wall -Wextra -std=c99 -O2
LDFLAGS=
LDLIBS=

SRC= main.c
DEP= ${SRC:.c=.d}
PRG= ${SRC:.c=}

all: ${PRG}

-include ${DEP}

clean:
    rm -f *.o
    rm -f ${DEP}
    rm -f ${PRG}

1 Ответ

0 голосов
/ 22 ноября 2018

Две вещи:

  1. В вашем Makefile вы указываете только один исходный файл.Вам нужно перечислить все , которые используются для сборки вашей программы.Т.е. вам нужно иметь, например,

    SRC = main.c mix.c
    

    Здесь вы должны перечислить все исходные файлы, необходимые для сборки вашей программы.

  2. Прямо сейчас выпопытаться встроить каждый из перечисленных исходных файлов в свою отдельную программу.Удалите переменную PRG и вместо этого сделайте что-то вроде

    OBJ = ${SRC:.c=.o}
    
    all: main
    
    main: ${OBJ}
    

    . Это создаст переменную OBJ, в которой будут перечислены необходимые объектные файлы (созданные из переменной SRC).Затем целевой объект main перечисляет объектные файлы, от которых он зависит, и команда make должна связать все объектные файлы, чтобы сформировать исполняемую программу main.

...