编译目标文件时出现g ++错误
问题描述:
我写了一个小的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的经验。
答
这不是一个错误,它是一个警告。 (从技术上讲,可以将警告视为不妨碍编译器完成其工作的错误。)
而您修复它的方式是修复您的代码。这与makefile无关。删除./include/algparam.h中第322行的变量'p'。 (编译器的警告信息中有一点提示。)
答
对于此警告,您可以在test.cpp或.h文件中仅对变量p
发表评论,因为您不使用它,或者不喜欢这
在你的代码
{
...
#ifdef _DEBUG_
xxx p;
#endif
...
}
,并在你的makefile,如果您想使用p
,只需添加-D_DEBUG_
在CXXFLAGS
我更新了它(改变错误的警告)。但是这些头文件是由cryptopp提供的...不会是改变它们的坏主意吗? – questions 2012-03-16 06:54:46
如果它是开源的,请进行更改并将其提交回存储库。如果您不想这样做,请提交功能请求让开发人员编写更清晰的代码。 (说实话,如果发生这种情况,你会很幸运 - 开源代码的质量从来没有那么棒。)作为最后的手段,你可以在包含特定头文件时禁用这些警告。大多数编译器都有一种在源文件中启用和禁用警告的方法。 – 2012-03-16 07:00:55