21

当我使用 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
4

2 回答 2

15

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

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

ETA:如果你要在那里运行,你真的想用来分配这些标志变量。无论哪种方式,它都可以工作,但如果你使用,那么每次 make 扩展变量时都会运行 shell 命令,每次编译一次。如果你使用它只会运行一次,当 makefile 被解析时。:=$(shell ...)=:=

于 2013-11-04T19:02:01.173 回答
7

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

CFLAGS += $(path)/dir/subdir/include     -> Got the above mentioned error.
CFLAGS += -I$(path)/dir/subdir/include   -> Fixed the issue.
于 2016-04-22T17:53:23.477 回答