使用gcc用-D选项编译多个文件
compiling multiple files with -D option using gcc
我有一个项目与多个。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.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)
也是文件的路径。注意,我必须在g++命令中添加相同的选项。还有别的办法吗?
不,头文件不是这样的。
头文件不是单独的编译单元。如果您通过-E
标志预编译所有文件(我认为),也许这将更有意义。这将留给您一堆.i
(我认为)文件,这些文件将被实际编译。注意,头文件现在没有了,但是它们的内容分布在不同的源文件中。这就是你每次都需要重新编译的代码。
有一些方法可以最小化源代码重新编译。例如这种情况:
foo。
int foo = 1;
可以变成这个:
foo。
extern int foo;
foo.cpp
int foo = 1;
所以你现在可以改变foo
的值而不需要重新编译。
但不幸的是,它也听起来像你的头太大了。如果你把所有东西都扔到一个头文件中你将会做很多重新编译。更具体的因素,这可能更容易避免。
还(或替代?)使用预编译头文件来减少编译时间。我从来没有用它们写过程序,但是我知道它们能解决这个问题。
- 使用 Makefile 中的头文件编译 Pybind (不使用 cmake)
- 如何使用命令提示符、记事本和 MinGW 使用主文件、头文件和实现文件编译C++程序?
- 无论如何可以将webm / mp4文件编译/记忆为.exe程序吗?(C++)
- 从生成文件编译错误:"Unable to open output file" ..."No such file or directory"
- 如何使用 GLFW 预编译的二进制文件编译 Visual Studio 2019 发布版本
- Arduino IDE中自定义库类的.h文件编译错误的原因是什么
- makefile和错误将与大型项目分开的文件编译
- 如何使用生成文件编译具有多个目录的 c++ 项目
- 我可以将Visual Studio 2015头文件编译成dll并在VS2013中使用它吗?
- 使用Bazel将C 文件编译为python.h
- 使用 .a 文件编译简单的C++文件
- OpenCV 3.2 文件编译
- 如何从多个 cpp 文件编译 WebAssembly
- 从多个文件编译可以"undefined reference"
- 使用静态依赖性为共享二进制文件编译语法需要更加清晰
- 将Gsoap Src文件编译到我的项目中
- 如何用多个文件编译make下的dlib
- 字段的类型不完整,从多个文件编译
- 强制将特定文件编译为Objective-C/文件类型,但将整个项目编译为Objective C++
- OpenGLES 标头(包括 Availability.h)可防止 CPP 文件编译