我们使用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