当我使用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
答案 0 :(得分:12)
该消息意味着您正在向编译器传递链接器标志(如-l
,告诉链接器引入库)。
这意味着运行root-config --cflags --glibs
的结果是生成链接器标志,并且这些标志将进入CXXFLAGS
,并将其传递给编译器。我不知道root-config
是什么,但您应该调查它的命令行并以不生成链接器标志的方式调用它。可能会删除--glibs
选项。
ETA:如果您要在那里运行:=
, 希望使用$(shell ...)
来分配这些标志变量。它将以任何一种方式工作,但是如果你使用=
,那么每次make扩展变量时都会运行命令运行shell命令,每次编译一次。如果你使用:=
,它只会在解析makefile时运行一次。
答案 1 :(得分:3)
我遇到了同样的错误,原因是我忘了在makefile中包含的cflags路径前添加-I
。例如:
CFLAGS += $(path)/dir/subdir/include -> Got the above mentioned error.
CFLAGS += -I$(path)/dir/subdir/include -> Fixed the issue.