3

我有一个具有许多功能的 c++ 程序,并且每个功能都有不同的 .cpp 文件。在主程序中,我只提供几个参数并调用函数。但是,完整的东西的编译需要很多时间。对于每次编译,我只更改主程序中的几个参数,并保留所有功能。有没有办法加快编译速度。?

4

3 回答 3

6

您正在重新编译不必要的代码。通常 IDE 会自动处理这个问题。否则,这取决于您如何编译代码。例如这样的行:

g++ *.cpp

或者

g++ -o program a.cpp b.cpp c.cpp

非常慢,因为在每次编译时,您都会重新编译所有内容。

如果您正在编写 Makefile,则应小心编写以避免重新编译。例如:

.PHONY: all
all: program

program: a.o b.o c.o
    g++ -o $@ $^ $(LDFLAGS)
%.o: %.cpp
    g++ $(CXXFLAGS) -o $@ $<
# other dependencies:
a.o: a.h
b.o: b.h a.h
c.o: c.h

在上面的例子中,改变c.cpp导致程序的编译c.cpp和链接。更改a.h导致程序的编译a.ob.o链接。也就是说,在每次构建时,您都编译尽可能少的文件以使程序保持最新。

旁注:编写 Makefile 时要小心。如果您错过了一个依赖项,您可能无法编译足够的文件,并且您最终可能会遇到难以发现的分段错误(充其量)。gcc另请查看for -M*options的手册,您可以在其中使用gcc自身生成依赖项,然后includeMakefile.

于 2012-07-02T13:26:06.183 回答
1
  • 尽量减少受参数更改影响的代码,理想情况下只更改一个没有人依赖的源文件(main.cpp)。
  • 检查你的包含:你真的需要它吗?尽可能使用前向声明(例如 #include 而不是 ),对于您自己的类,前向声明您可以做的。
  • 尝试使用 clang ( llvm.org ) 编译器。它有时比 gcc 编译得更快(假设你在 linux/unix 上)并给出更多可读的错误。

编辑:我假设你只是重新编译需要的东西。正如其他人建议的那样,使用构建系统(Makefile、IDE、CMake ...)运行最少数量的编译。

于 2012-07-02T13:26:16.510 回答
0

也许这会或不会有太大帮助,但我通过 ssh 运行代码,我知道运行/编译需要很长时间。如果您从数据文件中读取,而不是运行整个数据集,只运行一两个文件以查看您的预期结果。这将是您最终结果的样本,但仍应准确(只是统计数据较少)。一旦您调整了代码以使您满意,然后运行所有内容。通常这样你不会有任何问题,而且你的编译时间相对来说要快得多。

于 2012-07-02T14:32:31.710 回答