2012-03-16 22 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