2011-12-14 113 views

回答

5

這取決於你的編譯器。例如,使用GCC,你可能會寫:

g++ foo.cpp bar.cpp baz.cpp -o foo # compile program 
./foo        # run program 
+0

我提到-Wall&-g這是非常有用的。 – 2011-12-15 01:10:22

+0

非常感謝,這正是我想要的。 – Sohrab 2011-12-15 03:27:44

1

但是真正的答案是使用一些構建機器,有一個Makefile和使用GNU Make

有一些比GNU更好的建設者做,像Omake

建設者是非常有用的,因爲在example通過ruakh你可能不想重新編譯foo.cpp當只有bar.cpp改變,所以你需要採取依賴關係。

(也有的Makefile發電機,像automakecmake ...)

3

Basile's right on, you need build machinery有軟件,你可以很容易地努力。你真的希望能夠運行make或類似的東西,並以可重複的方式快速重建項目。您還希望確保您的整個項目保持最新狀態,重建所有依賴於已發生變化的事情。雖然你可以只保留一個包含g++行的shell腳本,如ruakh's answer,但這將會不必要地重新編譯超過你的需要。 (這對小項目來說並不是什麼大事,但當項目變得比平凡更重要時就變得很重要。)

我只花了15分鐘瀏覽了OMake文檔,但它看起來很有希望。 make在系統上是標準的,並且提供了大量預定義的構建規則,包括C++規則,所以編寫項目新的Makefile並不是很困難。

它會是這個樣子:

# the compiler and its flags 
CXX = g++ 
CXXFLAGS = -Wall 

PROGRAM = foo 

OBJECTS = foo_a.o foo_b.o foo_c.o foo_d.o 

.PHONY: all 

.DEFAULT: all 

all: $(PROGRAM) 

$(PROGRAM): $(OBJECTS) 

的對象foo_a.o將從名爲foo_a.cfoo_a.ccfoo_a.Cfoo_a.cppfoo_a.pfoo_a.ffoo_a.F相應的源文件,等建成,對於C ,C++,Fortran,Pascal,Lex,Yacc等。

O'Reilly make book此時此刻已經過時了, .SUFFIX規則已被pattern rules代替,但O'Reilly書中沒有涵蓋模式規則。也就是說,如果整個GNU Make documentation不適合你,它仍然是一個很好的起點。

相關問題