2013-07-17 33 views
1

我有一堆C++程序,每個程序都在它自己的子目錄中。每個子目錄在幾個文件中都有一個C++程序 - 每個類的.h和.cpp文件以及一個主要的.cpp程序。我想編譯每個程序,將可執行文件放在相應的子目錄中。 (我也想運行每個程序,並將其輸出重定向到一個放在相應子目錄中的文件,但如果我可以使編譯工作,我不應該有一個問題搞清楚這部分。)如何編譯所有子目錄中的多文件C++程序?

我在UNIX系統上使用bash shell(實際上是在Windows上運行的UNIX模擬器Cygwin)。

我已經設法在網上找到一個簡短的腳本來編輯當前目錄下的一個文件程序,但是就我而言。該腳本如下。

for f in *.cpp; 
    do g++ -Wall -O2 "$f" -o "{f/.cpp/}"; 
done; 

我真的很感激有人可以幫助我。我需要平均每兩週執行一次這個任務(更像是連續8周,然後不是8周等)

回答

0

假設你有一個目錄的所有的直接子目錄都是C++程序,那麼使用一些變化在這個...

for D in */; do cd "$D"; 
    # then either call make or call your g++ 
    # with whatever arguments in here 
    # or nest that script you found online if it seems to 
    # be doing the trick for you. 
    cd ../; 
done; 

這將在移動到每個目錄,做它的東西(不管你想要的是),然後搬回了。

3

除非你受虐待,否則使用makefile而不是shell腳本。

由於(顯然)每個可執行取決於所有在同一目錄下.h.cpp文件,makefile文件將很容易寫 - 每次都會碰到這樣的:

whatever.exe: x.obj y.obj z.obj 
    g++ -o whatever.exe x.obj y.obj z.obj 

您還可以添加目標在每個運行生成的可執行文件:

run: 
    whatever.exe 

這樣,您將使用make run運行可執行文件。

然後,你會(可能)需要在根目錄下生成一個makefile,遞歸地在每個子目錄中創建目標,然後運行每個子目錄(如上所述)。

這有幾個好處 - 主要是它實際上是爲這類任務而構建的,所以它確實做得很好。另一個是它注意到文件的時間戳,所以它只重建實際需要它的可執行文件(即,可執行文件所依賴的至少一個文件自從可執行文件本身被構建以來已被修改)。

+0

你必須接受makefile的幫助。如果你不想自己寫makefile,那麼你可以使用cmake來生成make文件....你也可以參考http://www.cmake.org/ – Saby

相關問題