FIX: A project deletes a precompiled header that was created by another project

This article was previously published under Q194615
This article has been archived. It is offered "as is" and will no longer be updated.
SYMPTOMS
If one project uses a precompiled header (using compiler option /Yu) thatwas created by another project, then the precompiled header is deletedwhen you perform a Clean or Rebuild-All command in Developer Studio.
RESOLUTION
In the workarounds that follow, a YC project refers to the project thatcreates the precompiled header (PCH); a YU project refers to a projectthat uses, but does not create, the precompiled header.

Option 1

Use a custom build step to create the PCH file. This does not impact the YUprojects.

In this case you can modify Project Settings for the Stdafx.cpp file sothat it is built with custom build rules rather than the standard methodfor building the PCH file.

To do this from the YC project:
  1. On the Project menu, click Settings to bring up the Project Settings dialog box.
  2. From the tree view in the left window, select Stdafx.cpp in the Source Files folder.
  3. Click the General tab in the right window and select Always use custom build step.
  4. Click the Custom Build tab.
  5. In the Commands window, enter the following (where Yc.pch is the name of your project pre-compiled header file):
       attrib -r $(OutDir)\yc.pch   cl [compiler switches] /Yc"stdafx.h" stdafx.cpp   attrib +r $(OutDir)\yc.pch						
  6. In the Outputs window, enter the following (where Yc.pch is the name of your project pre-compiled header file):
       $(OutDir)\yc.pch   $(OutDir)\stdafx.obj						
  7. Click Dependencies. Type the following in the user-defined Dependencies window:
       stdafx.h						
  8. Click OK.
Notes
  • You get the following error at the beginning of your Rebuild-All or Clean:
    Error: Could not delete file "filename" : Access is denied.
  • The pre-compiled header is not deleted even in the YC project when a Clean or Rebuild-All command is executed in Developer Studio. This behavior is consistent with Microsoft Visual C++, version 5.0.

Option 2

Use an environment variable to set the PCH switch in the YU projects. Thisdoes not impact the YC project(s).
  1. In the Windows NT Setting, Control Panel applet, select the System icon. Then select the Environment tab.
  2. In the Variable field, type in YCREL.
  3. In the Value field, enter:
       /Fp"..\Release/yc.pch" /Yu"stdafx.h"						
    (This uses relative paths although it is not required). Note that you alsoneed an environment variable for the debug build, such as YCDBG. That is, you need two environment variables for each project that produces PCH files.

    Note In Windows 95 or Windows 98, you must make system-wide environment variable setting changes by adding appropriate MS-DOS SET commands to the Autoexec.bat file and rebooting.
  4. In the Project Settings dialog box for the YU project, select the main node of the project labeled YU in the file tree.
  5. In the C/C++ tab, select the Precompiled Headers category.
  6. Click Not using precompiled headers. This turns off the /Fpand /Yu compiler switches.
  7. In the Project Options window (at the bottom of the Project Settings dialog box) add $(YCDBG) for your debug build or $(YCREL) for the Release build.
  8. Click OK.
  9. If you have not restarted Developer Studio since setting the environment variables, you must close it and reopen it.
Notes
  • You can unintentionally delete or modify the environment settings.
  • Build settings are hidden, which may make trouble-shooting build-related problems more difficult.
STATUS
Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the "Applies to" section.This bug was corrected in Visual Studio 6.0 Service Pack 3.
MORE INFORMATION

Steps to reproduce the behavior

  1. Create two MFC AppWizard DLL projects in the same workspace.
  2. Switch to the Win32 Release configuration for each project.
  3. In Project2, delete the Stdafx.cpp file from the project.
  4. In Project2, in the Project Settings dialog box, change the /Fp option to point to the PCH file from Project1.
  5. Build Project1.
  6. Build Project2.
  7. Rebuild All Project2 only.
Result
fatal error C1083: Cannot open precompiled header file: 'filename': Nosuch file or directory
REFERENCES
For more information about Visual Studio service packs, click the following article numbers to view the articles in the Microsoft Knowledge Base:
194022 Visual Studio 6.0 service packs, what, where, why
194295 How to tell that a Visual Studio service pack is installed
Properties

Article ID: 194615 - Last Review: 02/21/2014 00:30:30 - Revision: 3.1

  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • kbnosurvey kbarchive kberrmsg kbbug kbfix kbide kbqfe kbvs600sp3fix kbhotfixserver KB194615
Feedback