2013-11-04 9 views
8

Wenn ich Code kompilieren mit GNU Make ich mehrere Warnungen wie erhalten:Klirren: Warnung: -l *: ‚Linker‘ Eingang ungenutzt

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

Dies ist wahrscheinlich, weil ich etwas vermasselt habe in meinem Makefile (unten). Kann mir jemand auf das Problem hinweisen?

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 

Antwort

9

Diese Botschaft bedeutet, dass Sie Linker-Flags sind vorbei (wie -l, die den Linker in einer Bibliothek ziehen erzählt) an den Compiler.

Dies bedeutet, dass das Ergebnis der Ausführung root-config --cflags --glibs Linker-Flags generiert, und diese gehen in CXXFLAGS, die an den Compiler übergeben wird. Ich weiß nicht, was root-config ist, aber Sie sollten seine Befehlszeile untersuchen und es auf eine Weise aufrufen, wo es Linker-Flags nicht generiert. Wahrscheinlich wird das Entfernen der --glibs Option es tun.

ETA: Sie wirklich wollen := verwenden diese Flags Variablen zuweisen, wenn du gehst $(shell ...) dort zu laufen. Es funktioniert in beide Richtungen, aber wenn Sie = verwenden, wird der Shell-Befehl jedes Mal ausgeführt wird, erweitert die Variable, die einmal pro Kompilierung ist. Wenn Sie := verwenden, wird es nur einmal ausgeführt, wenn das Makefile geparst wird.

+0

Großartig! Danke für diese Tipps! – mareks

+1

D'oh! Ich habe alle Linker-Flags an den Compiler übergeben ... Ich wünschte, Clang wäre etwas beschreibender. Der Fehler klingt so, als ob die Lib ignoriert wurde, weil der Code niemals seine Symbole verwendet hat. – Navin

2

Ich habe diesen gleichen Fehler und der Grund war, dass ich vergaß, -I vor meinen eingeschlossenen Pfaden für cflags in Makefile hinzuzufügen. Zum Beispiel:

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