Xcode: generating the pch header causes compiler warning
When using the Xcode generator, the ProcessPCH phase gives a warning like in the following example output:
ProcessPCH++ build-xcode/subB/SharedPrecompiledHeaders/cmake_pch-gryekwbltrbpxvbhbvnnzaumwpsq/cmake_pch.hxx.pch build-xcode/subB/CMakeFiles/second.dir/cmake_pch.hxx normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler
cd /Users/craig/Projects/compcache
/Applications/Xcode-11.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x c++-header -target x86_64-apple-macos10.14 -fmessage-length=178 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -fcolor-diagnostics -Wno-trigraphs -fpascal-strings -O0 -Wno-missing-field-initializers -Wno-missing-prototypes -Wno-return-type -Wno-non-virtual-dtor -Wno-overloaded-virtual -Wno-exit-time-destructors -Wno-missing-braces -Wparentheses -Wswitch -Wno-unused-function -Wno-unused-label -Wno-unused-parameter -Wno-unused-variable -Wunused-value -Wno-empty-body -Wno-uninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wno-constant-conversion -Wno-int-conversion -Wno-bool-conversion -Wno-enum-conversion -Wno-float-conversion -Wno-non-literal-null-conversion -Wno-objc-literal-conversion -Wno-shorten-64-to-32 -Wno-newline-eof -Wno-c++11-extensions -DCMAKE_INTDIR=\"Debug\" -isysroot /Applications/Xcode-11.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk -fasm-blocks -fstrict-aliasing -Wdeprecated-declarations -Winvalid-offsetof -g -Wno-sign-conversion -Wno-infinite-recursion -Wno-move -Wno-comma -Wno-block-capture-autoreleasing -Wno-strict-prototypes -Wno-range-loop-analysis -Wno-semicolon-before-method-body -I/Users/craig/Projects/compcache/build-xcode/subB/Debug/include -I/Users/craig/Projects/compcache/build-xcode/subB/compcache.build/Debug/second.build/DerivedSources-normal/x86_64 -I/Users/craig/Projects/compcache/build-xcode/subB/compcache.build/Debug/second.build/DerivedSources/x86_64 -I/Users/craig/Projects/compcache/build-xcode/subB/compcache.build/Debug/second.build/DerivedSources -Wmost -Wno-four-char-constants -Wno-unknown-pragmas -F/Users/craig/Projects/compcache/build-xcode/subB/Debug -MD -MT dependencies -MF /Users/craig/Projects/compcache/build-xcode/subB/SharedPrecompiledHeaders/cmake_pch-gryekwbltrbpxvbhbvnnzaumwpsq/cmake_pch.hxx.d -c /Users/craig/Projects/compcache/build-xcode/subB/CMakeFiles/second.dir/cmake_pch.hxx -o /Users/craig/Projects/compcache/build-xcode/subB/SharedPrecompiledHeaders/cmake_pch-gryekwbltrbpxvbhbvnnzaumwpsq/cmake_pch.hxx.pch --serialize-diagnostics /Users/craig/Projects/compcache/build-xcode/subB/SharedPrecompiledHeaders/cmake_pch-gryekwbltrbpxvbhbvnnzaumwpsq/cmake_pch.hxx.dia
/Users/craig/Projects/compcache/build-xcode/subB/CMakeFiles/second.dir/cmake_pch.hxx:3:15: warning: #pragma system_header ignored in main file
[-Wpragma-system-header-outside-header]
#pragma clang system_header
^
1 warning generated.
An example of a generated cmake_pch.hxx
file that leads to the above warning:
/* generated by CMake */
#pragma clang system_header
#ifndef CMAKE_SKIP_PRECOMPILE_HEADERS
#ifdef __cplusplus
#include <iostream>
#include <cstdio>
#include "/Users/craig/Projects/compcache/subB/second.h"
#endif // __cplusplus
#endif // CMAKE_SKIP_PRECOMPILE_HEADERS
It's the #pragma
line that is causing the warning. We need to work out how to not trigger this warning because it breaks builds that use -Werror
.