使用gcc用-D选项编译多个文件

compiling multiple files with -D option using gcc

本文关键字:文件 编译 选项 gcc 使用      更新时间:2023-10-16

我有一个项目与多个。cpp和。h文件。我有一个名为global .h的文件,它包含在所有.cpp文件中。现在,在编译这个文件时,我使用了一些-D选项。这些选项影响所有文件,而不仅仅是global .h。

在我的makefile中,我必须在编译每个文件时使用相同的-D选项。当然,当删除这些选项时,会出现一些"undefined"错误。

这意味着每次我改变其中一个选项时,我都必须重新编译整个项目。是否有一种方法可以让我用这些选项编译ONLY global .h ?

这是我的makefile的一部分:创建全局变量的行。o:

Globals.o : $(GlobalsLib) $(GlobalsInc)
       g++ -c -Wall $(CodeDefined) $(UserDefined) $(GlobalsLib) -std=c++0x -o Globals.o

$(GlobalsLib)$(GlobalsInc)分别为文件Globals.hGlobals.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)也是文件的路径。注意,我必须在g++命令中添加相同的选项。还有别的办法吗?

不,头文件不是这样的。

头文件不是单独的编译单元。如果您通过-E标志预编译所有文件(我认为),也许这将更有意义。这将留给您一堆.i(我认为)文件,这些文件将被实际编译。注意,头文件现在没有了,但是它们的内容分布在不同的源文件中。这就是你每次都需要重新编译的代码。

有一些方法可以最小化源代码重新编译。例如这种情况:

foo。

int foo = 1;

可以变成这个:

foo。

extern int foo;

foo.cpp

int foo = 1;

所以你现在可以改变foo的值而不需要重新编译。

但不幸的是,它也听起来像你的头太大了。如果你把所有东西都扔到一个头文件中你将会做很多重新编译。更具体的因素,这可能更容易避免。

还(或替代?)使用预编译头文件来减少编译时间。我从来没有用它们写过程序,但是我知道它们能解决这个问题。