2012-07-02 91 views
3

我有一個C++程序,它有許多許多功能,我有不同的.cpp文件的每個功能。從主程序中,我只提供一些參數,只是調用函數。但是,編寫完整的東西需要花費很多時間。對於每個編譯,我只更改主程序中的一些參數,並保留所有功能。 無論如何加快編譯。?快速編譯在c + +

+2

什麼是您的命令行編譯?你在使用Makefile還是其他的構建工具? – RedX

+0

可能會提出某些平臺/編譯器特定的更改,但您不指定正在使用的內容。 – crashmstr

+0

你使用什麼編譯器?如果添加該細節,您可能會得到更有針對性的答案。 – eran

回答

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 [email protected] $^ $(LDFLAGS) 
%.o: %.cpp 
    g++ $(CXXFLAGS) -o [email protected] $< 
# 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並鏈接程序。也就是說,在每個版本上,您都可以編譯儘可能少的文件以使程序保持最新。

附註:編寫Makefiles時要小心。如果你錯過了依賴關係,你可能無法編譯足夠的文件,並且最終可能會出現難以定位的分段錯誤(最好)。看看也處於gcc-M*選擇,您可以使用gcc本身產生依賴手工,然後includeMakefile生成的輸出。

+0

是的,我知道我不需要重新編譯所有的函數文件。我只改變主程序中的一些值。我從來沒有寫過一個make文件,如果你能告訴我怎麼寫一個make文件會非常有幫助,謝謝。 – lovespeed

+0

@SthitadhiRoy,只是嘗試搜索「Makefile教程」,你會得到很多來源。如果你想要一個徹底的,但容易閱讀的解釋,你可以簽出[GNU make手冊](http://www.gnu.org/software/make/manual/make.html#Introduction)本身。 – Shahbaz

+2

他給了你一個完整的例子makefile,就在那裏。將它保存到一個名爲'Makefile'的文件中,正確設置文件名('func1.o',而不是'a.o',或其他),查找文檔,然後詢問具體問題。 – Useless

1
  • 儘量減少你的參數變化的影響的代碼,最好只改變一個源文件上(main.cpp中)沒有人實際上還要考慮。
  • 檢查你的包括:你真的需要它嗎?儘可能使用前向聲明(例如#include而不是),用於你自己的類,向前聲明你可以。
  • 嘗試使用clang(llvm.org)編譯器。它有時編譯比gcc更快(假設你在linux/unix上)並且給出了更多的可讀錯誤。

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

0

也許這會或不會太大的幫助,但我通過ssh運行的代碼,我知道它永遠運行/編譯。如果您正在從數據文件中讀取數據,而不是運行整組數據,則只能運行一個或兩個文件以查看您的預期結果。這將是您最終結果的一個樣本,但應該仍然準確(只需較少的統計數據)。一旦你調整了你的代碼以達到你的滿意度,那麼就運行一切。 通常是這樣你就沒有問題了,而且編譯時間比較快。