<div>I need the files to be copied at build time, not a compile time: They are files I am editing and I need the build system to export the files to the binary directory tree whenever they are changed.</div><div><br></div>
I know it looks stupid and probably is as well :-)  The reason is that when the project is being used by clients, I want them to include each file as follows (something which I use myself):<div><br></div><div>#include &quot;Braceless/Frontend/Scanner.hpp&quot;</div>
<div><br></div><div>And the only way I could figure out to get it working was by naming the build directory &quot;Braceless&quot; and then do that thing I&#39;m doing.  The project is organized like this:</div><div><br></div>
<div>   src/AST</div><div>   src/Driver</div><div>   src/Frontend</div><div>   ...</div><div><br></div><div>And I want to be able to write &quot;Braceless&quot; in front so that it works also when the header files and libraries have been installed on a system.  In the LLVM system, they solve this problem by storing the headers in another location than the source files - something I deeply loathe as it makes it very difficult to search for strings and even to edit a given source file and its header at the same time.</div>
<div><br></div><div>I&#39;ll try out your comments, but I don&#39;t see any way of getting rid of that ../.. construct.  By the way, I am a CMake newbie so I just did what I could do to make it work somehow.</div><div><br>
</div><div><br></div><div>Cheers,</div><div>Mikael<br><br><div class="gmail_quote">2012/6/27 Rolf Eike Beer <span dir="ltr">&lt;<a href="mailto:eike@sf-mail.de" target="_blank">eike@sf-mail.de</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5">&gt; Sigh, now I sent you the code from the wrong directory, but the code for<br>
&gt; the &quot;Backend&quot; component is virtually identical.  I don&#39;t know how to use<br>
&gt; functions with CMake, so I simply made a verbatim copy of the below code<br>
&gt; in<br>
&gt; each subfolder and edited it to match the subfolder.  So the Backend<br>
&gt; project looks like this:<br>
&gt;<br>
&gt; project(Backend)<br>
&gt;<br>
&gt; set(PublicHeaders<br>
&gt;     &quot;Backend.hpp&quot;<br>
&gt;     &quot;Context.hpp&quot;<br>
&gt; )<br>
&gt; set(PublishedHeaders &quot;&quot;)<br>
&gt; foreach(Header IN LISTS PublicHeaders)<br>
&gt;     get_filename_component(HeaderFilename &quot;${Header}&quot; NAME)<br>
&gt;     set(Source &quot;${CMAKE_CURRENT_SOURCE_DIR}/${Header}&quot;)<br>
&gt;     set(Output &quot;${CMAKE_CURRENT_BINARY_DIR}/${HeaderFilename}&quot;)<br>
&gt;     list(APPEND PublishedHeaders &quot;${Output}&quot;)<br>
&gt;     add_custom_command(<br>
&gt;         OUTPUT &quot;${Output}&quot;<br>
&gt;         COMMAND &quot;${CMAKE_COMMAND}&quot; -E copy_if_different &quot;${Source}&quot;<br>
&gt; &quot;${Output}&quot;<br>
&gt;         MAIN_DEPENDENCY &quot;${Source}&quot;<br>
&gt;         COMMENT &quot;Publishing ${HeaderFilename}&quot;<br>
&gt;         VERBATIM<br>
&gt;     )<br>
<br>
</div></div>Why don&#39;t you simply use configure_file(... COPYONLY) here?<br>
<div class="im"><br>
&gt; endforeach()<br>
&gt; add_custom_target(<br>
&gt;     publish_backend_headers<br>
&gt;     ALL<br>
&gt;     DEPENDS ${PublishedHeaders}<br>
&gt;     SOURCES ${PublicHeaders}<br>
&gt; )<br>
&gt; include_directories(&quot;${CMAKE_BINARY_DIR}/../&quot;)<br>
<br>
</div>This is almost certainly wrong. Guess my build dir is /tmp/foo, why on<br>
earth do you want to include /tmp? I could understand if it would be<br>
${CMAKE_CURRENT_BINARY_DIR}/.. if you are in a subdirectory, but otherwise<br>
this is likely completely bogus.<br>
<div class="im"><br>
&gt; include_directories(&quot;$ENV{LLVM}/include&quot;)<br>
&gt;<br>
&gt; add_definitions(-D__STDC_CONSTANT_MACROS)<br>
&gt; add_definitions(-D__STDC_LIMIT_MACROS)<br>
&gt;<br>
&gt; add_library(Backend<br>
&gt;     &quot;Backend.cpp&quot;<br>
&gt; )<br>
&gt;<br>
&gt; add_dependencies(Backend publish_backend_headers)<br>
<br>
</div>I think you can avoid the whole add_custom_target/add_library by just writing<br>
<br>
add_library(Backend Backend.cpp ${PublishedHeaders})<br>
<br>
(Untested. May only reliably work if you use configure_file. ymmv).<br>
<span class="HOEnZb"><font color="#888888"><br>
Eike<br>
</font></span><div class="HOEnZb"><div class="h5">--<br>
<br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Please keep messages on-topic and check the CMake FAQ at: <a href="http://www.cmake.org/Wiki/CMake_FAQ" target="_blank">http://www.cmake.org/Wiki/CMake_FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://www.cmake.org/mailman/listinfo/cmake" target="_blank">http://www.cmake.org/mailman/listinfo/cmake</a><br>
</div></div></blockquote></div><br>
</div>