我們使用Microsoft NMAKE編譯大量本機C++和某些英特爾Fortran文件。典型地,生成文件所包含的行如本(對於每個文件):更改較早的makefile系統以利用並行編譯
$(LINKPATH)\ olemisc.obj:OLE2 \ olemisc.cpp $(OLEMISC_DEP)
$(CCDEBUG)OLE2 \ olemisc.cpp
$ (GDEPS)OLE2 \ olemisc.cpp
OLEMISC_DEP = \
E:\ OLE2 \ ifaceole.hpp \
E:\ OLE2 \ cpptypes.hpp \
等
它工作正常,但一次編譯一個文件。我們希望利用多核處理器並一次編譯多個文件。我希望得到關於實現這一目標的最佳方式的一些建議。這是我到目前爲止。
一: GNU化妝可以讓你使用例如--jobs = 2選項執行並行作業和正常工作與海灣合作委員會(我們不能使用GCC黯然)。但是微軟的NMAKE似乎不支持這種選擇。這兩個名稱程序的兼容性如何,如果我們開始使用GNU MAKE,您是否可以同時運行兩個cl.exe進程?我希望他們抱怨PDB(調試)文件被鎖定,或者是否有一個新的cl.exe命令行參數可以幫助你解決這個問題?
二: cl.exe時具有/ MP(構建具有多個進程)標誌,它可以讓你在同一時間編譯多個文件是否通過命令行傳遞在一起,例如:
CL/MP7 a.cpp b.cpp c.cpp d.cpp e.cpp
但是使用這將需要更改生成文件。我們的make文件是由我們自己的程序從其他文件生成的,所以我可以輕鬆地更改我們在makefile中的內容。但是,如何將來自不同cpp文件的依賴關係結合在makefile中,以便通過一次cl.exe調用將它們一起編譯?每個.obj都有一組不同的目標和一組命令來完成它?
或者我更改makefile來不調用cl.exe,而是我們編寫的其他一些小的可執行文件,然後將一系列.cpp文件集中在一起,然後將shell傳出到cl.exe,傳遞多個參數?這將工作,似乎可行,但也似乎過於複雜,我不能看到其他人這樣做。
我錯過了一些明顯的東西嗎?必須有一個更簡單的方法來完成這個?
我們不使用Visual Studio或解決方案文件進行編譯,因爲文件列表非常廣泛,我們在makefile中有一些特殊項目,理論上不希望過度依賴於MS C++等
有人給我一個「這很有用」的勾號給你所有的細節嗎? * grins * – 2011-03-17 19:48:46