2012-03-16 21 views
0

我写了一个小的makefile,它遵循一般结构,创建目标文件,然后链接创建一个可执行文件。下面是它的外观..编译目标文件时出现g ++错误

CXX=g++ 
CXXFLAGS=-Wall -g 
INCLUDES= -I ./ 
LDFLAGS= -L ./ 
LIBS= -lcryptopp 
SRCS= test.cpp 
OBJS= $(SRCS:.cpp=.o) 
EXEC=test 

all: $(EXEC) 

$(EXEC): $(OBJS) 
    $(CXX) $(CXXFLAGS) $(INCLUDES) -o $(EXEC) $(OBJS) $(LDFLAGS) $(LIBS) 
.cpp.o: 
    $(CXX) $(CXXFLAGS) $(INCLUDES) -c $< -o [email protected] 

Cryptopp文库(cryptopp)是静态的。现在,当我尝试时试图创建目标文件中的第一个命令运行,运行此生成的文件,..其给了我很多的错误这样的..

test.cpp:289: instantiated from here 
./include/algparam.h:322: warning: unused variable 'p' 
./include/algparam.h: In member function 'void CryptoPP::AlgorithmParametersTemplate<T>::MoveInto(void*) const [with T = unsigned char]': 

最后,它连接所有罚款和可执行作品但是如何在不移除-wall的情况下摆脱这些警告?我没有太多的make和makefile的经验。

回答

3

这不是一个错误,它是一个警告。 (从技术上讲,可以将警告视为不妨碍编译器完成其工作的错误。)

而您修复它的方式是修复您的代码。这与makefile无关。删除./include/algparam.h中第322行的变量'p'。 (编译器的警告信息中有一点提示。)

+0

我更新了它(改变错误的警告)。但是这些头文件是由cryptopp提供的...不会是改变它们的坏主意吗? – questions 2012-03-16 06:54:46

+2

如果它是开源的,请进行更改并将其提交回存储库。如果您不想这样做,请提交功能请求让开发人员编写更清晰的代码。 (说实话,如果发生这种情况,你会很幸运 - 开源代码的质量从来没有那么棒。)作为最后的手段,你可以在包含特定头文件时禁用这些警告。大多数编译器都有一种在源文件中启用和禁用警告的方法。 – 2012-03-16 07:00:55

0

对于此警告,您可以在test.cpp或.h文件中仅对变量p发表评论,因为您不使用它,或者不喜欢这

在你的代码

{ 
... 
#ifdef _DEBUG_ 
xxx p; 
#endif 
... 
} 

,并在你的makefile,如果您想使用p,只需添加-D_DEBUG_CXXFLAGS