【问题标题】:Is it possible for Visual Studio C++ to compile objects without linkingVisual Studio C++ 是否可以在不链接的情况下编译对象
【发布时间】:2012-07-06 01:40:36
【问题描述】:

我正在运行 VS 2010 SP1,并且我有一个每周运行一次的特殊分析配置(因为构建服务器需要很长时间才能分析所有内容)。

我希望无需链接即可运行此配置。如果一个项目中的所有代码都通过了分析,那么我希望构建继续到下一个项目而不进行链接。

我看不出有一种方法可以告诉 VS 只运行 C++ 编译器而不进行链接。有谁知道在现有的 vcxproj 中执行此操作的方法?

[编辑] 澄清:我希望它在 IDE 中工作。

我的下一步行动是手动编辑 vcxproj,看看我是否无法摆脱构建的链接阶段。

【问题讨论】:

  • 来自 MSDN (msdn.microsoft.com/en-us/library/8we9bhf4.aspx) 关于 /c 开关:“此选项在开发环境中不可用。”
  • 是的,“/c”已经被隐式使用,在文档的前面:“在开发环境中创建的任何内部项目默认使用 /c 选项。”

标签: c++ visual-studio-2010 linker


【解决方案1】:

C++ 编译器cl.exe 当然可以,那就是/c 开关(只编译,不链接)。不过,不确定 IDE 使用的 msbuild 系统是否适用于 .vcxproj 文件。

根据the documentation,这应该可以:

msbuild /target:Compile projectfile

msbuild /target:projectname:Compile solutionfile

您可能还对/filelogger/fileloggerparameters 选项感兴趣,它们可以让您捕获构建消息。

【讨论】:

  • 是的,我知道 /c,但这不起作用(VS 在编译每个 obj 时已经这样做了)。我有兴趣通过项目文件执行此操作,因此 IDE 也将支持此操作,并且不需要从 cmd 行运行 msbuild。
  • 只是为了好玩,我也尝试了 msbuild,但看起来我需要转换我的解决方案(因为我的项目引用了解决方案变量)。
  • @Tim:msbuild 允许您传入解决方案文件,然后还有另一个选项可以从该解决方案构建特定项目。希望这样需要的变量就存在了。
  • 啊,是的,谢谢,我还需要添加 /p:Configuration=analysisCfg。 /target:projectname:Compile 不起作用,唉(目标 projectname:Compile 不存在)。
  • 啊,我能够附加 ;Compile 并且它确实是构建的同义词,叹息。请注意,它是分号,而不是冒号。
【解决方案2】:

就在这种情况下;使用 IDE 时尝试在不链接的情况下构建。

为了在我的配置中实现这一点,我更改了我的应用程序的配置类型:

General -> Project Defaults -> Configuration Type

具体来说,从Application (.exe) 更改为Static library (.lib)。这将允许您构建所有项目,但不需要进行任何链接。

【讨论】:

  • 是的,我不久前就想到了这一点,但从来没有费心回答它。给你!对于未来的寻求者,请务必将其设置为预期的配置(在我的情况下,它是 DebugAnalysis)。
【解决方案3】:

好的,我的问题并不完全具体,我应该问的是: “我可以在没有链接的情况下对 C++ 项目运行静态代码分析吗?”。

最近的回答是“是的,在 VS 2017 中使用 msbuild 属性 RunCodeAnalysisOnce=true”。

【讨论】:

    【解决方案4】:

    Microsoft docs 声称此选项在开发环境中不可用。

    【讨论】:

      猜你喜欢
      • 2010-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多