我有一個包含多個.cpp和.h文件的項目。我有一個名爲Globals.h的文件,它包含在所有的.cpp文件中。 現在編譯這個文件時我使用了一些-D選項。這些選項不僅影響Globals.h,還會影響所有文件。使用gcc編譯帶-D選項的多個文件
在我的makefile中,我編譯每個文件時必須使用相同的-D選項。當然,當刪除這些選項時,會出現一些「未定義的」錯誤。
這意味着每次更改其中一個選項時,我都必須重新編譯整個項目。 有沒有辦法讓我只用Globals.h編譯這些選項?
這是我的makefile文件的一部分:即創建Globals.o 線:
Globals.o : $(GlobalsLib) $(GlobalsInc)
g++ -c -Wall $(CodeDefined) $(UserDefined) $(GlobalsLib) -std=c++0x -o Globals.o
$(GlobalsLib)
和$(GlobalsInc)
是路徑文件Globals.h
和Globals.cpp
$(CodeDefined)
和$(UserDefined)
被-U和-D選項的代碼用於創建另一個.o文件:
NT_FFT_Decomp.o : $(GlobalsLib) $(GlobalsInc) $(NT_DecompLib) $(NT_DecompInc)
g++ -c -Wall $(CodeDefined) $(UserDefined) $(NT_DecompLib) -std=c++0x -o NT_FFT_Decomp.o
(NT_DecompLib) $(NT_DecompInc)
也是到f爾斯。請注意,我必須在g ++命令中添加相同的選項。反正有嗎?
頭不編譯,所以你不能只編譯Global.h。每次更改標題時,都應重新編譯整個項目,以確保所有源代碼都使用相同版本的標頭進行編譯。 – 2013-05-14 19:15:19
你應該使用宏作爲編譯器(所以'CXX = g ++'作爲宏定義,然後'$(CXX)'代替命令行中的'g ++'),以及它的標誌(通常是'CXXFLAGS = -Wall -std = C++ 0x'作爲宏定義,然後在命令行中使用'$(CXXFLAGS)')。這意味着你可以改變標誌一次(如果需要的話在命令行上)並且它改變爲完全調用'make'。 – 2013-05-14 23:30:27
我已經做到了。當我發佈這個問題時,我只是改變了他們 – ProWi 2013-05-15 13:54:20