【发布时间】:2011-08-11 22:46:04
【问题描述】:
我希望有人指出我们遇到的问题或解决方法。
使用 /MP 编译项目时,似乎只会同时编译同一文件夹中的文件。我使用进程资源管理器滑动命令行并确认行为。
项目过滤器似乎对同时编译的内容没有任何影响。
磁盘上的项目结构:
Folder\
project.vcxproj
source\
foo.cpp
foo1.cpp
other_folder\
bar.cpp
bar1.cpp
bar3.cpp
初始进程树:
MSBuild.exe
cl.exe ( passed: source\foo.cpp source\foo1.cpp )
cl.exe ( passed: source\foo.cpp )
cl.exe ( passed: source\foo1.cpp )
在 cl.exe 的 2 个子实例完成后,父级关闭并出现以下进程树:
MSBuild.exe
cl.exe ( passed: other_folder\bar.cpp other_folder\bar1.cpp other_folder\bar2.cpp )
cl.exe ( passed: other_folder\bar.cpp )
cl.exe ( passed: other_folder\bar1.cpp )
cl.exe ( passed: other_folder\bar2.cpp )
我们的源代码很好地组织在许多级别的嵌套文件夹中,这些文件夹与磁盘上标题的布局相匹配 - 我不想放弃它来利用 /MP。
【问题讨论】:
-
这可能不是你能看到的。基于并发构建项目,而不是基于源文件。您应该看到 cl.exe 的 one 实例构建了两个 .cpp 文件。如果项目之间完全没有依赖关系(不太可能),那么只会同时构建这两个项目。
-
你试过了吗?你熟悉 /MP 吗?我知道同时构建项目,这不是我要问的。
-
您的 MSBuild 日志中显示了什么?我刚刚在我的机器上创建了一个新的 VS 2010 C++ 项目,使用上面列出的目录结构,将所有 C++ 文件添加到项目中,并使用 MSBuild 从命令行构建。 MSBuild 记录了 CL.exe 的一次执行,并使用 /MP 选项在同一命令行上传递了所有文件(来自两个目录)。
-
@Bilal,我会在星期一试一试,看看我得到了什么。
标签: c++ visual-studio-2010 visual-c++ msbuild cl.exe