<pre>Hello,<br><br>I have the cmake book and have not found how to do what I need, if it is<br>possible.<br>I have a large project that must compile for both Linux and Windows. The<br>project is mostly header-only (except for unit tests) and categorized and<br>
organized into subdirectories. Something like this:<br><br>build/<br>src/<br>      utils<br>              a<br>                     A.h<br>                     unittest_a.cpp<br><br>              b<br>                     B.h   // needs a.h<br>
                     unittest_b.cpp<br><br>      common<br>              c<br>                    C.h      // needs A.h and B.h<br>                    testit.cpp   // needs C.h, B.h and A.h<br><br><br>The directory src/utils/a has a header file A.h. Likewise src/utils/b has a<br>
header file B.h that #includes a.h.<br>Finally, c has a header file C.h that #includes a.h and b.h.<br><br><br>This is just a short example of my large project. In reality there are other<br>directories and levels of subdirectories.<br>
<br>What can I do in the local CMakeLists.txt files so that the directories<br>where the header files live are automatically made part of the others as<br>needed,<br>so I do not have to keep remembering all of them for every header-only<br>
library all the way down the dependency chain?<br><br>I tried using add_custom_target(...) to create a header-only library target<br>for &quot;a&quot; and &quot;b&quot;, then tried add_dependencies() for b (which needs a) and for<br>
c(which needs b and by extension also needs a). This fails and in the build<br>directory if I do &quot;cmake ..&quot; followed by &quot;VERBOSE=1&quot; make it fails in<br>src/common/c because there is no -Ia -Ib in the compile line.<br>
<br>I have attached this small example to this email though I don&#39;t know if the<br>mailman can handle attachments.<br><br>I hope all is clear.<br><br>Thanks for your kind assistance!<br><br></pre>