问题 clang:警告:-l *:'链接器'输入未使用


当我使用GNU Make编译代码时,我得到多个警告,如:

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

11466
2017-11-04 18:44


起源



答案:


该消息意味着您正在传递链接器标志(如 -l 它告诉链接器将库引入编译器。

这意味着运行的结果 root-config --cflags --glibs 正在生成链接器标志,然后进入 CXXFLAGS,正在传递给编译器。我不知道是什么 root-config 是,但您应该调查其命令行并以不生成链接器标志的方式调用它。可能会删除 --glibs 选项会做到这一点。

ETA:你  想要使用 := 如果要运行,请分配这些标志变量 $(shell ...) 那里。它会以任何方式工作,但如果你使用 = 然后将运行shell命令 每次make扩展变量,每次编译一次。如果你使用 := 解析makefile时,它只会运行一次。


10
2017-11-04 19:02



大!感谢您提供这些提示! - mareks
D'哦!我将所有链接器标志传递给编译器...我希望clang更具描述性。该错误使得听起来像lib被忽略,因为代码从未使用过它的符号。 - Navin


答案:


该消息意味着您正在传递链接器标志(如 -l 它告诉链接器将库引入编译器。

这意味着运行的结果 root-config --cflags --glibs 正在生成链接器标志,然后进入 CXXFLAGS,正在传递给编译器。我不知道是什么 root-config 是,但您应该调查其命令行并以不生成链接器标志的方式调用它。可能会删除 --glibs 选项会做到这一点。

ETA:你  想要使用 := 如果要运行,请分配这些标志变量 $(shell ...) 那里。它会以任何方式工作,但如果你使用 = 然后将运行shell命令 每次make扩展变量,每次编译一次。如果你使用 := 解析makefile时,它只会运行一次。


10
2017-11-04 19:02



大!感谢您提供这些提示! - mareks
D'哦!我将所有链接器标志传递给编译器...我希望clang更具描述性。该错误使得听起来像lib被忽略,因为代码从未使用过它的符号。 - Navin


我得到了同样的错误,原因是我忘了添加 -I 在我包含的makefile中的cflags路径前面。例如:

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

3
2018-04-22 17:53