<html><head/><body><html><head></head><body>I&#39;ve been using a C/C++ makefile that handled dependencies automatically for about 20 yrs.  It uses gmake and something called makedepend(s), if memory serves.  I haven&#39;t coded in some time, but it worked across 10+ different platforms for commercial software that the company.  We even switched the MSVC project files to gmake to better control those builds.  <br>
<br>
I&#39;ll look for it and email you privately.<br><br><div class="gmail_quote">Michael Potter &lt;michael@potter.name&gt; wrote:<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<pre style="white-space: pre-wrap; word-wrap:break-word; font-family: monospace; margin-top: 0px">After a couple of hours googling around to see how others are using<br />CMake and automatic dependency checking, I am beginning to think that<br />CMake is not the solution to my problem.<br /><br />I don't want to maintain the dependencies by hand, and I don't want to<br />continue to use my kludgy bash script for extracting the dependencies.<br /><br />Here is what I am currently investigating:<br /><a href="http://www.gnu.org/software/automake/manual/html_node/Dependency-Tracking.html#Dependency-Tracking">http://www.gnu.org/software/automake/manual/html_node/Dependency-Tracking.html#Dependency-Tracking</a><br /><br />Automake does dependency tracking as it is compiling so I have hope<br />that my generated code will not be a problem.   That is in contrast<br />with dependency tracking that happens at the start of a compile;<br />because the generated code does not exist at th
 e start
of a compile,<br />the dependencies cannot be determined.<br /><br />On Fri, Feb 1, 2013 at 12:58 PM, Ryan Curtin &lt;ryan@igglybob.com&gt; wrote:<br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #729fcf; padding-left: 1ex;">On Fri, Feb 01, 2013 at 10:26:21AM -0500, Michael Potter wrote:<br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;">Here is my question that I cannot find documented in CMake...<br /><br />Is there a way to generate the dependencies from the source?<br /><br />Specifically, if I have source that looks like this:<br /><br />in dilbert.c:<br />#include "src/alice.h"<br />#include "src/wally.h"<br /><br />Right now I have a hand coded bash script that generates<br />obj/dilbert.o: src/dilbert.c src/alice.h src/wally.h<br />cc -o $@ src/dilbert.c<br /><br />That way all I need to do is maintain the source and the tedious part<br />of maintaining
  the
makefile is done for me.   The bash script is<br />sophisticated enough to handle recursion and ignoring some includes.<br />As slick as it is, I want to get of this system and move to main<br />stream scheme.<br /><br />How does cmake eliminate that part of the makefile creation?</blockquote><br />In general CMake does not do this.  You can set it up in different ways,<br />but the way I generally set up a project is to put either a<br />CMakeFiles.txt in each directory, or one CMakeFiles.txt somewhere, and a<br />command like<br /><br />add_executable(the_program<br />src/alice.h<br />src/alice.c<br />src/wally.h<br />src/wally.c<br />src/dilbert.c<br />...<br />)<br /><br />but this does mean that every file you make in the project, you have to<br />add it to the list of compiled files.<br /><br />I think that what you want to do is say something like<br />"add_executable(the_program main.c)" and then CMake looks through all<br />the #includes of main.c (recursively) to ge
 nerate
a list of files to be<br />compiled.<br /><br />That is a complex problem and while it can be solved with CMake it would<br />be... somewhat backhanded.  You could write a script which would look<br />through each file in a list for #include lines using regexes, and then<br />somehow pruned that list to only those #includes which were relevant<br />(i.e. filter out #include &lt;stdio.h&gt; and similar).  Then you could call<br />that script again recursively with the new list.<br /><br />There are a few gotchas in that idea, but it sounds like you already<br />have this system basically implemented in bash.  Converting it to a<br />CMake script is within the realm of possibility, if that's what you want<br />to do.  I've not seen a CMake project that does this, but if it works<br />and it's well-documented and maintainable, I don't see any problems with<br />it.<br /><br />--<br />Ryan Curtin       | "Think!  What to do!"<br />ryan@igglybob.com |   - The Master<br /><hr /><br
  />Ale
mailing list<br />Ale@ale.org<br /><a href="http://mail.ale.org/mailman/listinfo/ale">http://mail.ale.org/mailman/listinfo/ale</a><br />See JOBS, ANNOUNCE and SCHOOLS lists at<br /><a href="http://mail.ale.org/mailman/listinfo">http://mail.ale.org/mailman/listinfo</a></blockquote><br /><br /></pre></blockquote></div><br>
-- <br>
Sent from a Linux system.</body></html></body></html>