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