Неиспользуемый ввод «компоновщика» [-Wunused-аргумент командной строки]

#c #makefile #clang

#c #makefile создать файл #лязг

Вопрос:

Я столкнулся с проблемой при запуске makefile. Проблема в том, что после запуска makefile я получаю сообщение об ошибке

Неиспользуемый ввод «компоновщика» [-Wunused-аргумент командной строки]

Скриншот ошибки:

введите описание изображения здесь

Более того, когда я использую команду make с именем файла, команды отлично работают без каких-либо проблем и показывают файл сообщения.o обновлен, однако при вентиляции выдается сообщение об ошибке.o и вентиляция

Кодекс:

 #declaring .PHONY rules
.PHONY: clean

#variable defined for -Wall -Wextra
CFLAGS=-Wall -Wextra

#rule to build the executable program venting from object file
venting: venting.o
    gcc $(CFLAGS) -o venting venting.o

#list objectable file is created with the following rules.
list.o: list.c list.h
    gcc $(CFLAGS) -c list.c

#list-adders objectable file is created with the following rules.
list-adders.o: list-adders.c list.h
    gcc $(CFLAGS) -c list-adders.c

#vents objectable file is created with the following rules.
vents.o: vents.c list.h vents.h
    gcc $(CFLAGS) -c vents.c

#venting.o objectable file is created with the following rules.
venting.o: list.o list-adders.o vents.o
    gcc $(CFLAGS) -c list.o list-adders.o vents.o

#rule to remove all build targets and rebuild project from the beginning.
clean:
    rm -f *.o venting
 

Ответ №1:

 venting.o: list.o list-adders.o vents.o
    gcc $(CFLAGS) -c list.o list-adders.o vents.o
 

То есть принимает объектные файлы и передает их gcc -c (т. Е. Только для компиляции, без ссылки). Поскольку связывание не выполняется, любые входные файлы, которые будут переданы только компоновщику, здесь не обрабатываются, поэтому драйвер интерфейса предполагает, что они были перечислены по ошибке.

Ответ №2:

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

Невозможно создать «большой» .o файл из множества других .o файлов. Это просто не то, что могут сделать компиляторы.

Итак, это правило:

 venting.o: list.o list-adders.o vents.o
     gcc $(CFLAGS) -c list.o list-adders.o vents.o
 

не может работать.

Комментарии:

1. ld -r может это сделать, так что теоретически вы могли бы использовать gcc -Wl,-r -o venting.o list.o list-adders.o vents.o here — но это вряд ли будет поддерживаемым вариантом использования и столкнется с проблемами при запуске кода и разрешении конструктора.