Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Precompiled Header with Constants issue

I have a few constants files "Constants.h" in my project that I am including in the Prefix.pch file to be available to all the classes in my project. They just contain a bunch of #define statements.

My classes don't recognize these constants (no autocomplete) and Xcode gives me "Undeclared Identifier" errors every time I use them. However when I run the project everything works fine (set to ignore errors).

Is there any way I can get rid of these warnings? #pragma ignore them in the prefix file or something? I've tried many options, including setting "precompile prefix header" to NO in build settings.

Any ideas?

EDIT: I have tried deleting derived data and cleaning / deleting build folder to no avail.

It might be worth noting that I have 3 targets in my project, and another project within this project.

Also, some of the #imports import normal classes. Like a category extension on UIFont and an Analytics class. Could this affect it?

like image 374
TTillage Avatar asked Aug 16 '12 15:08

TTillage


People also ask

When to use precompiled headers C++?

Usage of precompiled headers may significantly reduce compilation time, especially when applied to large header files, header files that include many other header files, or header files that are included in many translation units.

How to use precompiled headers C++?

To create a precompiled header file, simply compile it as you would any other file, if necessary using the -x option to make the driver treat it as a C or C++ header file. You will probably want to use a tool like make to keep the precompiled header up-to-date when the headers it contains change.

How do I precompile a header file?

The compiler options for precompiled headers are /Y . In the project property pages, the options are located under Configuration Properties > C/C++ > Precompiled Headers. You can choose to not use precompiled headers, and you can specify the header file name and the name and path of the output file.

What is the purpose of a precompiled header?

Precompiled headers (PCH) are a performance feature supported by some compilers to compile a stable body of code, and store the compiled state of the code in a binary file. During subsequent compilations, the compiler will load the stored state, and continue compiling the specified file.


1 Answers

To fix this, I had to change the 'Precompile Prefix Header' flag to NO in my target's Build Settings. By doing this you'll lose any build performance achieved by having a cached compiled header file, but in my case, my Prefix Header is pretty small so I wont see a hit in the time it takes to build.

like image 179
Peter Avatar answered Sep 20 '22 16:09

Peter