Sigh, now I sent you the code from the wrong directory, but the code for the &quot;Backend&quot; component is virtually identical.  I don&#39;t know how to use functions with CMake, so I simply made a verbatim copy of the below code in each subfolder and edited it to match the subfolder.  So the Backend project looks like this:<div>
<br></div><div><div style="font-family:&#39;Courier New&#39;;font-size:12pt;background-color:rgb(255,255,255)">
<pre>project(Backend)

set(PublicHeaders
    &quot;Backend.hpp&quot;
    &quot;Context.hpp&quot;
)
set(PublishedHeaders &quot;&quot;)
foreach(Header IN LISTS PublicHeaders)
    get_filename_component(HeaderFilename &quot;${Header}&quot; NAME)
    set(Source &quot;${CMAKE_CURRENT_SOURCE_DIR}/${Header}&quot;)
    set(Output &quot;${CMAKE_CURRENT_BINARY_DIR}/${HeaderFilename}&quot;)
    list(APPEND PublishedHeaders &quot;${Output}&quot;)
    add_custom_command(
        OUTPUT &quot;${Output}&quot;
        COMMAND &quot;${CMAKE_COMMAND}&quot; -E copy_if_different &quot;${Source}&quot; &quot;${Output}&quot;
        MAIN_DEPENDENCY &quot;${Source}&quot;
        COMMENT &quot;Publishing ${HeaderFilename}&quot;
        VERBATIM
    )
endforeach()
add_custom_target(
    publish_backend_headers
    ALL
    DEPENDS ${PublishedHeaders}
    SOURCES ${PublicHeaders}
)
include_directories(&quot;${CMAKE_BINARY_DIR}/../&quot;)
include_directories(&quot;$ENV{LLVM}/include&quot;)

add_definitions(-D__STDC_CONSTANT_MACROS)
add_definitions(-D__STDC_LIMIT_MACROS)

add_library(Backend
    &quot;Backend.cpp&quot;
)

add_dependencies(Backend publish_backend_headers)

</pre></div><br><div class="gmail_quote">2012/6/27 Mikael Lyngvig <span dir="ltr">&lt;<a href="mailto:mikael@lyngvig.org" target="_blank">mikael@lyngvig.org</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Here goes:<div><br></div><div><div style="font-size:12pt;font-family:&#39;Courier New&#39;">
<pre>project(Driver)

set(PublicHeaders
    &quot;Driver.hpp&quot;
    &quot;Setup.hpp&quot;
)
set(PublishedHeaders &quot;&quot;)
foreach(Header IN LISTS PublicHeaders)
    get_filename_component(HeaderFilename &quot;${Header}&quot; NAME)
    set(Source &quot;${CMAKE_CURRENT_SOURCE_DIR}/${Header}&quot;)
    set(Output &quot;${CMAKE_CURRENT_BINARY_DIR}/${HeaderFilename}&quot;)
    list(APPEND PublishedHeaders &quot;${Output}&quot;)
    add_custom_command(
        OUTPUT &quot;${Output}&quot;
        COMMAND &quot;${CMAKE_COMMAND}&quot; -E copy_if_different &quot;${Source}&quot; &quot;${Output}&quot;
        MAIN_DEPENDENCY &quot;${Source}&quot;
        COMMENT &quot;Publishing ${HeaderFilename}&quot;
        VERBATIM
    )
endforeach()
add_custom_target(
    publish_driver_headers
    ALL
    DEPENDS ${PublishedHeaders}
    SOURCES ${PublicHeaders}
)
</pre></div><div>And then I have an additional:</div><div><span style="font-size:12pt;font-family:&#39;Courier New&#39;"><br></span></div><div><span style="font-size:12pt;font-family:&#39;Courier New&#39;">add_dependencies(Driver publish_driver_headers)</span></div>
<div><div class="h5">
<div><font face="Courier New" size="3"><br></font></div><div><font face="Courier New" size="3"><br></font></div><div><font face="Courier New" size="3">Cheers,</font></div><div><font face="Courier New" size="3">Mikael</font></div>

<br><div class="gmail_quote">2012/6/27 David Cole <span dir="ltr">&lt;<a href="mailto:david.cole@kitware.com" target="_blank">david.cole@kitware.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div><div>On Tue, Jun 26, 2012 at 6:40 PM, Mikael Lyngvig &lt;<a href="mailto:mikael@lyngvig.org" target="_blank">mikael@lyngvig.org</a>&gt; wrote:<br>
&gt; Ohh, sorry.  Ninja says:<br>
&gt;<br>
&gt; [117/325] Building CXX object Driver/CMakeFiles/Driver.dir/Driver.cpp.obj<br>
&gt; FAILED: c:\Mingw64\bin\c++.exe   -DNDEBUG<br>
&gt; -DBR0_BUILD_ASSERT=BR0_BUILD_ASSERT_DELETE<br>
&gt; -DBR0_BUILD_CHARSET=BR0_BUILD_CHARSET_ASCII<br>
&gt; -DBR0_BUILD_ENDIAN=BR0_BUILD_ENDIAN_LITTLE<br>
&gt; -DBR0_BUILD_MODE=BR0_BUILD_MODE_SHIP<br>
&gt; -DBR0_BUILD_TARGET=BR0_BUILD_TARGET_WINDOWS -Wall -Wno-long-long -pedantic<br>
&gt; -I.. -Ic:/Synology/clang-3.2-WIN64/include    -static-libgcc -MMD -MT<br>
&gt; Driver/CMakeFiles/Driver.dir/Driver.cpp.obj -MF<br>
&gt; &quot;Driver/CMakeFiles/Driver.dir/Driver.cpp.obj.d&quot; -o<br>
&gt; Driver/CMakeFiles/Driver.dir/Driver.cpp.obj -c<br>
&gt; C:/Dropbox/Source/braceless/src/Driver/Driver.cpp<br>
&gt; C:/Dropbox/Source/braceless/src/Driver/Driver.cpp:11:42: fatal error:<br>
&gt; Braceless0/Backend/Backend.hpp: No such file or directory<br>
&gt; compilation terminated.<br>
&gt; [117/325] Building CXX object Driver/CMakeFiles/Driver.dir/Setup.cpp.obj<br>
&gt; ninja: build stopped: subcommand failed.<br>
&gt;<br>
&gt; The problem is that the file Driver.cpp depends on Backend.hpp having been<br>
&gt; created.  But Driver.cpp should not be compiled until the second-last item<br>
&gt; in the list of objects to make ([324/325]).<br>
&gt;<br>
&gt; So, somehow, Ninja picks up the target Driver.obj and builds it way too<br>
&gt; early.  With GNU Make, everything goes according to plan, but with Ninja,<br>
&gt; there&#39;s some sort of confusion somewhere.<br>
&gt;<br>
&gt;<br>
&gt; Cheers,<br>
&gt; Mikael<br>
&gt;<br>
&gt; 2012/6/27 David Cole &lt;<a href="mailto:david.cole@kitware.com" target="_blank">david.cole@kitware.com</a>&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Tue, Jun 26, 2012 at 6:30 PM, Mikael Lyngvig &lt;<a href="mailto:mikael@lyngvig.org" target="_blank">mikael@lyngvig.org</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt; &gt; No, I delete the entire build tree (I build out of the source tree,<br>
&gt;&gt; &gt; btw).<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; The procedure is as follows:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;    rem foo contains the source code<br>
&gt;&gt; &gt;    md foo-build<br>
&gt;&gt; &gt;    cd foo-build<br>
&gt;&gt; &gt;    cmake -G Ninja ..\foo<br>
&gt;&gt; &gt;    ninja<br>
&gt;&gt; &gt;    rem fails as described earlier<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; But you didn&#39;t really describe the failure.<br>
&gt;&gt;<br>
&gt;&gt; What is the error output? (from cmake or from ninja?)<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;     cd ..<br>
&gt;&gt; &gt;     rd /s /q foo-build<br>
&gt;&gt; &gt;     md foo-build<br>
&gt;&gt; &gt;     cd foo-build<br>
&gt;&gt; &gt;     cmake -G &quot;MinGW Makefiles&quot; ..\foo<br>
&gt;&gt; &gt;     make<br>
&gt;&gt; &gt;     rem succeeds as described earlier<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Thank you for your reply.  If you need source, I can send you a zip<br>
&gt;&gt; &gt; archive<br>
&gt;&gt; &gt; as it is an incomplete open source project.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Cheers,<br>
&gt;&gt; &gt; Mikael<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; 2012/6/27 David Cole &lt;<a href="mailto:david.cole@kitware.com" target="_blank">david.cole@kitware.com</a>&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; You can&#39;t switch generators in the same build tree without deleting<br>
&gt;&gt; &gt;&gt; absolutely everything and starting over.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Is that what you&#39;re trying to do?<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; If you want a make build tree and a ninja build tree, you&#39;ll need two<br>
&gt;&gt; &gt;&gt; separate build trees....<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; HTH,<br>
&gt;&gt; &gt;&gt; David<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; On Tue, Jun 26, 2012 at 4:45 PM, Mikael Lyngvig &lt;<a href="mailto:mikael@lyngvig.org" target="_blank">mikael@lyngvig.org</a>&gt;<br>
&gt;&gt; &gt;&gt; wrote:<br>
&gt;&gt; &gt;&gt; &gt; Hi,<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; I am a fan of Ninja.  Since I started using it, everything&#39;s been<br>
&gt;&gt; &gt;&gt; &gt; built<br>
&gt;&gt; &gt;&gt; &gt; much, much faster than before.  Among other things because I use<br>
&gt;&gt; &gt;&gt; &gt; CMake<br>
&gt;&gt; &gt;&gt; &gt; to<br>
&gt;&gt; &gt;&gt; &gt; publish headers to the binary directory so as to allow me to include<br>
&gt;&gt; &gt;&gt; &gt; the<br>
&gt;&gt; &gt;&gt; &gt; headers with a relative path without having to move all my headers to<br>
&gt;&gt; &gt;&gt; &gt; a<br>
&gt;&gt; &gt;&gt; &gt; central include directory (I want my source files and headers to be<br>
&gt;&gt; &gt;&gt; &gt; in<br>
&gt;&gt; &gt;&gt; &gt; the<br>
&gt;&gt; &gt;&gt; &gt; same directory).  Ninja does this very fast, whereas GNU Make takes<br>
&gt;&gt; &gt;&gt; &gt; forever<br>
&gt;&gt; &gt;&gt; &gt; to publish my header files.<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; However, I have a puzzling problem: Out of the blue, Ninja started<br>
&gt;&gt; &gt;&gt; &gt; failing<br>
&gt;&gt; &gt;&gt; &gt; to build my project.  If I remake the project with &#39;cmake -G &quot;MinGW<br>
&gt;&gt; &gt;&gt; &gt; Makefiles&quot;&#39;, it takes ages to build but it succeeds.  If I do &#39;cmake<br>
&gt;&gt; &gt;&gt; &gt; -G<br>
&gt;&gt; &gt;&gt; &gt; Ninja&#39;, it quickly aborts because it seems that either CMake or Ninja<br>
&gt;&gt; &gt;&gt; &gt; wants<br>
&gt;&gt; &gt;&gt; &gt; to build one of the last targets at a very early point in the build<br>
&gt;&gt; &gt;&gt; &gt; phase.<br>
&gt;&gt; &gt;&gt; &gt;  I have an executable, driver.exe, which is supposed to be built as<br>
&gt;&gt; &gt;&gt; &gt; the<br>
&gt;&gt; &gt;&gt; &gt; very<br>
&gt;&gt; &gt;&gt; &gt; last item.  With Ninja, however, it pops up around 20 percent into<br>
&gt;&gt; &gt;&gt; &gt; the<br>
&gt;&gt; &gt;&gt; &gt; build<br>
&gt;&gt; &gt;&gt; &gt; and the build fails because the dependent libraries are nowhere to be<br>
&gt;&gt; &gt;&gt; &gt; found<br>
&gt;&gt; &gt;&gt; &gt; (they haven&#39;t been built yet).  I have tried clearing the binaries<br>
&gt;&gt; &gt;&gt; &gt; directory<br>
&gt;&gt; &gt;&gt; &gt; (rd /s /q foo &amp; md foo) and so on a number of times, but Ninja<br>
&gt;&gt; &gt;&gt; &gt; insists<br>
&gt;&gt; &gt;&gt; &gt; on<br>
&gt;&gt; &gt;&gt; &gt; trying to build this final executable at a very early stage.<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Any ideas?  I suppose the problem is caused by one of these three<br>
&gt;&gt; &gt;&gt; &gt; things:<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;    1. An error on my part.  Very likely.<br>
&gt;&gt; &gt;&gt; &gt;    2. An error in CMake&#39;s generation of Ninja scripts.  Not unlikely<br>
&gt;&gt; &gt;&gt; &gt; due<br>
&gt;&gt; &gt;&gt; &gt; to<br>
&gt;&gt; &gt;&gt; &gt; the still fairly immature support for Ninja.<br>
&gt;&gt; &gt;&gt; &gt;    3. An error in Ninja.  Highly unlikely as Ninja builds tons and<br>
&gt;&gt; &gt;&gt; &gt; tons<br>
&gt;&gt; &gt;&gt; &gt; of<br>
&gt;&gt; &gt;&gt; &gt; projects all over the world each day and nobody seem to have run into<br>
&gt;&gt; &gt;&gt; &gt; this<br>
&gt;&gt; &gt;&gt; &gt; problem before.<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; How do you locate the problem?<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Thanks in advance!<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Cheers,<br>
&gt;&gt; &gt;&gt; &gt; Mikael<br>
&gt;&gt; &gt;&gt; &gt; -- Love Thy Frog!<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; --<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Visit other Kitware open-source projects at<br>
&gt;&gt; &gt;&gt; &gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Please keep messages on-topic and check the CMake FAQ at:<br>
&gt;&gt; &gt;&gt; &gt; <a href="http://www.cmake.org/Wiki/CMake_FAQ" target="_blank">http://www.cmake.org/Wiki/CMake_FAQ</a><br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Follow this link to subscribe/unsubscribe:<br>
&gt;&gt; &gt;&gt; &gt; <a href="http://www.cmake.org/mailman/listinfo/cmake" target="_blank">http://www.cmake.org/mailman/listinfo/cmake</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;<br>
&gt;<br>
<br>
</div></div>What does your add_custom_command look like that generates Backend.hpp?<br>
<br>
(offline for a while, next response much later... :-)<br>
</blockquote></div><br><br clear="all"><div><br></div></div></div><span class="HOEnZb"><font color="#888888">-- <br>-- Love Thy Frog!<br>
</font></span></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>-- Love Thy Frog!<br>
</div>