【问题标题】:Strategies for multicore builds (/MP) that use #import使用 #import 的多核构建 (/MP) 策略
【发布时间】:2010-09-18 19:42:08
【问题描述】:

我正在使用 VS 2008 为我们的大型 VC++ 项目开发新的解决方案配置。我希望此配置使用多核构建标志 /MP

但是,生成 COM 包装类的“#import”功能遍布整个代码库,使用 /MP 时不支持此功能。

我明白为什么#import 不起作用,我想知道是否有人遇到过这个问题以及他们是如何解决这个问题的?

我正在做以下事情:

  • 不要在小型项目或超出帮助的项目上使用 /MP 标志。 (也许我会稍后再回复他们)
  • 删除了#import 并将其替换为更标准的 MIDL 生成的标头 (#include)。这只是在几个容易转换为老式 COM 的地方的一个选项。
  • 创建一个#imports 剩余库的新项目。先做那个构建。 #包括它在之前#imported 的所有地方创建的 .tlh 文件。

我很好奇是否有人还有其他建议?另外,关于最后一点(创建一个新项目并仅在此处使用#import)- 如果你这样做了像这样的,你是怎么做到的?什么类型的项目,“源”是什么样的,你在哪里输出文件?你是如何包括他们的? (你知道的,为我考虑所有的事情!)

【问题讨论】:

  • 如果您想要多核构建,您的最后一个选项似乎是最好的方法 - 它是一致的并且不会浪费工作。抱歉,我无法提供有关它的详细信息,
  • 感谢您的评论。事实证明,在构建的不同阶段,我需要几个阶段的 tlh 生成(一场几乎无望的战斗)。我已经把它搁置了——我目前的战斗是离开 VSS。

标签: visual-studio-2008 visual-c++ build-process multicore


【解决方案1】:

我有一个项目,其中有两个源文件#import 相同的文件。使用 /MP 编译时,它偶尔会收到拒绝访问错误,因为两个源文件都试图同时创建 .tlb。我通过启用预编译头文件并将#import 添加到预编译头文件源文件中来纠正此问题。

【讨论】:

  • 这对我有用。不确定是否有任何缺点,但现在我很高兴。谢谢。
【解决方案2】:

您可以对整个项目使用 /MP 选项,然后使用 /MP1 选项对单个文件进行例外处理。

【讨论】:

  • 在 VS 2017 中,刚刚为包含 #imports 的文件关闭了 /MP
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-16
  • 2017-01-15
相关资源
最近更新 更多