我有一个包含多个.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