On Tue, Mar 13, 2012 at 07:08:31PM -0400, Bill Hoffman wrote: > PrecompiledHeader - This one seems to be a dependency problem. > > The first time you run it you get this: > > 122: Run Build Command:C:/cygwin/bin/ninja.exe > [3/4] Building C object CMakeFiles\foo.dir\foo1.c.obj > 122: FAILED: C:\PROGRA~2\MICROS~1.0\VC\bin\cl.exe /nologo /DWIN32 > /D_WINDOWS /W3 /Zm1000 /D_DEBUG /MDd /Zi /Ob0 /Od /RTC1 > /Yufoo_precompiled.h /FIfoo_precompiled.h "/FpC:/Users/hoffman/Work/My > Builds/cmake-ninja/Tests/PrecompiledHeader/PCH/foo_precompiled.pch" > /FoCMakeFiles\foo.dir\foo1.c.obj /Fdfoo.pdb -c "C:\Users\hoffman\Work\My > Builds\cmake\Tests\PrecompiledHeader\foo1.c" > 122: > 122: foo1.c > 122: C:\Users\hoffman\Work\My > Builds\cmake\Tests\PrecompiledHeader\foo1.c : fatal error C1083: Cannot > open precompiled header file: 'C:/Users/hoffman/Work/My > Builds/cmake-ninja/Tests/PrecompiledHeader/PCH/foo_precompiled.pch': > Permission denied > [3/4] Building C object CMakeFiles\foo.dir\foo_precompile.c.obj out: > foo_precom[3/4] Building C object CMakeFiles\foo.dir\foo2.c.obj > out: foo2.c > 122: ninja: build stopped: subcommand failed. > 1/1 Test #122: PrecompiledHeader ................***Failed 1.96 sec > > If I run the test again, it passes. Might be that ninja is doing more > in parallel than gmake, nmake or visual studio.
Yes, it is a dependency problem. Neither the Makefile nor Ninja generators can easily generate correct dependencies for PCH, because the PCH output file name only appears in the compiler flags. The CMakeLists.txt for this test contains a hack to add correct dependency information for the Makefile generator: > # Setup dependencies for precompiled header creation and use. The VS > # IDE takes care of this automatically. > IF("${CMAKE_GENERATOR}" MATCHES "Makefile") > # This source file creates the precompiled header as a side-effect. > SET_SOURCE_FILES_PROPERTIES(foo_precompile.c PROPERTIES > OBJECT_OUTPUTS "${PCH_DIR}/foo_precompiled.pch") > > # These source files use the precompiled header. > SET_SOURCE_FILES_PROPERTIES(${foo_SRCS} PROPERTIES > OBJECT_DEPENDS "${PCH_DIR}/foo_precompiled.pch") > ENDIF("${CMAKE_GENERATOR}" MATCHES "Makefile") Maybe another time we can think about ways to improve PCH support, but for now I guess we can add an OR Ninja to this test and add OBJECT_OUTPUTS support to the Ninja generator. Thanks, -- Peter -- Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers