clang: предупреждение: - L*: вход 'linker' не используется

когда я компилирую код с помощью GNU, я получаю несколько предупреждений, таких как:

clang: warning: -lGui: 'linker' input unused

это, вероятно, потому, что я что-то перепутал в моем файле Makefile (ниже). Кто-нибудь может указать мне на проблему?

CXX=g++
CC=g++
CXXFLAGS=-g -Wall -W -Wshadow -Wcast-qual -Wwrite-strings $(shell root-config --cflags --glibs)
CPPFLAGS+=-MMD -MP
LDFLAGS=-g $(shell root-config --ldflags)
LDLIBS=$(shell root-config --libs)

xSec_x: xSec_x.o xSec.o Analysis.o
-include xSec_x.d xSec.d Analysis.d

xSec.o: xSec.cpp xSec.h Analysis.h Analysis.cpp

xSec_x.o: xSec_x.cpp xSec.h Analysis.h

clean:
    rm -f @rm -f $(PROGRAMS) *.o *.d

2 ответов


это сообщение означает, что вы передаете флаги компоновщика (например,-l который сообщает компоновщику, чтобы вытащить библиотеку) компилятору.

это означает, что результат выполнения root-config --cflags --glibs генерирует флаги компоновщика, и они входят в CXXFLAGS, который передается компилятору. Я не знаю, что!--3--> есть, но вы должны исследовать его командную строку и вызвать ее таким образом, чтобы она не генерировала флаги компоновщика. Вероятно, удаление --glibs опция будет делать он.

эта: ты действительно до := чтобы назначить эти переменные флагов, если вы собираетесь запустить $(shell ...) там. Он будет работать в любом случае, но если вы используете = тогда команда оболочки будет запущена каждый раз, когда make расширяет переменную, который один раз за компиляцию. Если вы используете := он будет запущен только один раз, когда makefile будет проанализирован.


Я получил эту же ошибку, и причина в том, что я забыл добавить -I перед моими включенными путями для cflags в makefile. Например:

CFLAGS += $(path)/dir/subdir/include     -> Got the above mentioned error.
CFLAGS += -I$(path)/dir/subdir/include   -> Fixed the issue.