nmake provides its own cpp (nmake_root/lib/cpp) to insure included files (such as headers) are picked up correctly in the VPATH. Typically, compilers use this basic rule to pick up headers which are included using "quotes":
Using this process if a source file, a.c, is down the VPATH, and an included file, a.h(1), is in the same directory, but a newer a.h(2) exists earlier in the VPATH, then the compiler will include a.h(1) and ignore the newer a.h(2). This will also occur when a header file includes another header file (and think about the situation if you store all your header files is a common directory).
By default, nmake cpp has this same behavior, which is standard preprocessing practice on UNIX® platforms. However, nmake cpp provides an extension which allows the directory of the including file to be replaced by a list of include directories. The -I- option provides the way to specify this directory list, and also provides for different search paths for headers included using "quotes" and using <brackets>.
The use of nmake cpp can be disabled by setting the variable
nativepp=1 in your makefiles or shell environment (using
nativepp=-1 will suppress the standard warning message.)
Note: if you are using the native preprocessor it is important
to put all your source code in a single VPATH node or
<>-style bracketed includes,
""-style quoted include files may be picked
up incorrectly, thereby corrupting
your product (you will probably not see compile errors with this happens).
Imagine two .o's used to make up a single target both referencing different
versions of the same header file...
Exceptions? Yes, as always there are some exceptions to this rule. In this case there are a few preprocessors out there that support -I- and the strict -I search for viewpathing. When nmake is used with a preprocessor like this it will detect it and use the native preprocessor automatically instead of its own. To keep track of this the make probe file for the compiler will contain a -I- in the definition of CC.DIALECT (to view the make probe file use the command 'probe -l C make /path/to/cc'). Examples are the Gnu C compiler, EDG C++ compilers, HP aCC, and later releases of Sun Forte C++.