【问题标题】:Microsoft.CppClean.targets deletes files I needMicrosoft.CppClean.targets 删除我需要的文件
【发布时间】:2013-08-02 13:53:02
【问题描述】:

我有一个 VS2012 解决方案。其中一个项目 A 在运行时生成一个 .h 文件。这个头文件被另一个项目B使用了。项目A和项目B在同一个目录下。

但是当项目 B 开始重建时,C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppClean.targets 会删除项目 A 生成的文件。由于这个项目 B 不能找不到文件,构建失败。

如何避免在干净构建期间删除文件?这两个项目是否应该移动到不同的目录?

请注意,Visual Studio 2008 中不会出现此问题。

【问题讨论】:

    标签: visual-studio-2012 rebuild


    【解决方案1】:

    您是否在解决方案中设置了build order?必须明确设置项目B依赖A,除非你使用project referencing functionality built into VS直接设置两个项目之间的依赖关系。

    【讨论】:

    • 是的,项目依赖设置正确。项目 A 首先构建并在运行时生成文件。当项目 B 开始构建时,它会删除这些文件,尽管这些文件是为项目 B 构建的。
    • @YonatanSimson 然后提出一个新问题
    【解决方案2】:

    此标头是由“构建事件”在临时(“中间”)目录中生成的吗?如果是这样,那么项目 B 假定它是一个临时文件并将其删除。这是因为项目 B 的清理在 temp 目录中找到了 header 但不知道它是项目 A 的输出。可能的解决方案:

    • 将输出文件夹与临时文件夹分离,并在输出文件夹中生成标头。
    • 将 output 和 temp 文件夹放在一起,但将 Project A 的 output/temp 文件夹与 Project B 的文件夹分开。
    • 在自定义构建步骤而不是构建事件中生成标头,并将标头指定为步骤的输出。

    【讨论】:

      【解决方案3】:

      我在迁移到 VS 2015 时遇到了同样的问题。解决方案是将“配置属性->常规->中间目录”设置为 ..\\$(ProjectName)\ 以便 Build.CppClean 不会清理来自其他不相关项目的先前构建 dll。这对我有用。

      【讨论】:

        猜你喜欢
        • 2012-02-24
        • 1970-01-01
        • 2017-08-29
        • 2014-02-24
        • 2014-09-24
        • 2013-10-03
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        相关资源
        最近更新 更多