簡體   English   中英

在c ++中快速編譯

[英]fast compilation in c++

我有一個c ++程序,它有許多功能,我為每個函數都有不同的.cpp文件。 從主程序,我只提供一些參數,只需調用函數。 然而,整篇文章的編譯需要花費很多時間。 對於每個編譯,我只更改主程序中的一些參數,並保留所有功能。 無論如何都要加快編譯速度。

您正在重新編譯不必要的代碼。 通常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程序的和鏈接。 改變ah導致編譯aobo以及程序的鏈接。 也就是說,在每個構建中,您可以編譯可能的最小文件數以使程序保持最新。

旁注:編寫Makefile時要小心。 如果您錯過了一個依賴項,您可能無法編譯足夠的文件,並且最終可能會遇到難以分析的分段錯誤(充其量)。 另請參閱gcc for -M*選項手冊,您可以使用gcc本身生成依賴項,然后在Makefile include生成的輸出。

  • 嘗試最小化受參數更改影響的代碼,理想情況下只更改一個沒有人依賴的源文件(main.cpp)。
  • 檢查你的包括:你真的需要它嗎? 盡可能使用前向聲明(例如#include而不是),對於您自己的類,轉發聲明您可以做什么。
  • 嘗試使用clang( llvm.org )編譯器。 它有時比gcc編譯得更快(假設你在linux / unix上)並且提供更多可讀錯誤。

編輯:我假設你只是重新編譯需要的東西。 正如其他人所建議的那樣,使用構建系統(Makefile,IDE,CMake ...)來運行最少數量的編譯。

也許這會有用或者沒有用,但我通過ssh運行代碼,我知道運行/編譯需要永遠。 如果您正在讀取數據文件,而不是運行整個數據集,則只運行一兩個文件以查看預期結果。 這將是您最終結果的樣本,但仍應准確(只需較少的統計數據)。 一旦你調整了你的代碼,讓你滿意,然后運行一切。 通常你會遇到這樣的問題,而且相對而言你的編譯時間要快得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM