[英]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
導致編譯ao
和bo
以及程序的鏈接。 也就是說,在每個構建中,您可以編譯可能的最小文件數以使程序保持最新。
旁注:編寫Makefile時要小心。 如果您錯過了一個依賴項,您可能無法編譯足夠的文件,並且最終可能會遇到難以分析的分段錯誤(充其量)。 另請參閱gcc
for -M*
選項手冊,您可以使用gcc
本身生成依賴項,然后在Makefile
include
生成的輸出。
編輯:我假設你只是重新編譯需要的東西。 正如其他人所建議的那樣,使用構建系統(Makefile,IDE,CMake ...)來運行最少數量的編譯。
也許這會有用或者沒有用,但我通過ssh運行代碼,我知道運行/編譯需要永遠。 如果您正在讀取數據文件,而不是運行整個數據集,則只運行一兩個文件以查看預期結果。 這將是您最終結果的樣本,但仍應准確(只需較少的統計數據)。 一旦你調整了你的代碼,讓你滿意,然后運行一切。 通常你會遇到這樣的問題,而且相對而言你的編譯時間要快得多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.