【问题标题】:MSVC: pragma to force rebuild of a file?MSVC:编译指示强制重建文件?
【发布时间】:2012-07-08 13:43:17
【问题描述】:

是否有 MSVC 的编译指示语句会导致编译器始终重新构建文件 - 以防它认为它是刚刚构建的?

【问题讨论】:

  • 不,构建系统在确定要重建的内容时不会查看文件内部。您的问题记录不足,无法提出替代方案。
  • 我的问题很简单:我使用一个源文件来构建两个不同的应用程序。对象用于生成此源文件的选项略有不同。因此,当它为第一个程序构建时,第二个程序会出现一些链接器错误。这里只有在第二个程序的上下文中重建这个单一的目标文件有帮助。
  • 右键单击文件、属性、C/C++、输出文件,更改对象文件名,以便将其编译为不同的 .obj 文件。
  • 没有什么可以改变的...可能这个选项在 VC++ 6 中不存在?
  • 呃,总是提到你使用的是上个世纪的工具。

标签: visual-studio visual-c++ pragma rebuild


【解决方案1】:

这是我用来实现此目的的技巧:

1) 添加类似

的构建后步骤命令
echo #define __FORCE_REBUILD__ "Include this file in a cpp to invalidate it at each compilation" > $(ProjectDir)ForceRebuild.h

2) 在要强制重建的每个 cpp 中添加一个“#include "ForceRebuild.h"'。

它仅在实际发生构建后才起作用(因为如果 Visual Studio 决定跳过构建项目,则会跳过后期构建)。

【讨论】:

    【解决方案2】:

    我怀疑有,而且我很确定不可能(除非对工具链进行重大更改)。

    原因很简单:当make(或等效的)决定构建什么时,它根本不会查看所涉及文件的内容——它只是将目标文件上的时间戳与源文件上的时间戳进行比较。如果目标文件比其源文件新,则永远不会为该文件调用编译器,因此编译器将永远无法看到该文件的内容(包括理论上的 #pragma)。

    【讨论】:

      猜你喜欢
      • 2020-08-16
      • 2011-12-20
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 2019-09-26
      • 1970-01-01
      • 2012-03-03
      • 2022-01-15
      相关资源
      最近更新 更多