<br><font size=2 face="sans-serif">That solution works pretty good Mike.
Not quite what I thought I was looking for, but it works.</font>
<br><font size=2 face="sans-serif">---------------------------------------------------------<br>
Aaron Wright<br>
Software Engineer - DCS Group<br>
Schweitzer Engineering Laboratories, Inc.<br>
Pullman, WA 99163<br>
509-334-8087</font>
<br>
<br>
<br>
<table width=100%>
<tr valign=top>
<td width=40%><font size=1 face="sans-serif"><b>Mike Jackson &lt;mike.jackson@bluequartz.net&gt;</b>
</font>
<br><font size=1 face="sans-serif">Sent by: cmake-bounces@cmake.org</font>
<p><font size=1 face="sans-serif">10/24/2009 04:50 AM</font>
<td width=59%>
<table width=100%>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">To</font></div>
<td><font size=1 face="sans-serif">Aaron_Wright@selinc.com</font>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">cc</font></div>
<td><font size=1 face="sans-serif">cmake@cmake.org</font>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">Subject</font></div>
<td><font size=1 face="sans-serif">Re: [CMake] Include Guard to Stop Duplicate
Targets?</font></table>
<br>
<table>
<tr valign=top>
<td>
<td></table>
<br></table>
<br>
<br>
<br><tt><font size=2>Few possibilities:<br>
 &nbsp; &nbsp;Are Components a and b just libraries that do NOT really
depend on<br>
Executable A, B, or C? If so, then in the top level CMakeLists.txt<br>
file add those subdirectories FIRST, then add the Executable's<br>
directories with dependencies on components a and b.<br>
<br>
 &nbsp; If components a and b are something like plugins and they need
the<br>
executables A, B or C built first then you may have to add some logic<br>
to the components a and b to avoid adding them again.<br>
<br>
_________________________________________________________<br>
Mike Jackson &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mike.jackson@bluequartz.net<br>
BlueQuartz Software &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;www.bluequartz.net<br>
Principal Software Engineer &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;Dayton, Ohio<br>
<br>
<br>
<br>
<br>
On Fri, Oct 23, 2009 at 6:09 PM, &nbsp;&lt;Aaron_Wright@selinc.com&gt;
wrote:<br>
&gt;<br>
&gt; I have a small project with several different parts that I would like
to<br>
&gt; build with CMake, but I'm having some trouble pulling it all together.<br>
&gt;<br>
&gt; &nbsp;For example purposes, there's an overall project with three
executables<br>
&gt; that use two static libraries. The executables and static libraries
are<br>
&gt; produced as part of the build. The directory structure looks like
this:<br>
&gt;<br>
&gt; &nbsp; &nbsp;/<br>
&gt; &nbsp; &nbsp; &nbsp; projects/<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;00-0000/<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CMakeLists.txt<br>
&gt; &nbsp; &nbsp; &nbsp; products/<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;executable_a/<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; src/<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; include/<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CMakeLists.txt<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;executable_b/<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; src/<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; include/<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CMakeLists.txt<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;executable_c/<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; src/<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; include/<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CMakeLists.txt<br>
&gt; &nbsp; &nbsp; &nbsp; components/<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;a/<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; src/<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; include/<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CMakeLists.txt<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;b/<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; src/<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; include/<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CMakeLists.txt<br>
&gt;<br>
&gt; I would like /projects/00-0000/CMakeLists.txt to be the top level<br>
&gt; CMakeLists.txt file and to contain:<br>
&gt;<br>
&gt; &nbsp; &nbsp;PROJECT(00-0000)<br>
&gt;<br>
&gt; &nbsp; &nbsp;ADD_SUBDIRECTORY(../../products/executable_a executable_a)<br>
&gt; &nbsp; &nbsp;ADD_SUBDIRECTORY(../../products/executable_b executable_b)<br>
&gt; &nbsp; &nbsp;ADD_SUBDIRECTORY(../../products/executable_c executable_c)<br>
&gt;<br>
&gt; And /products/executable_a/CMakeLists.txt to contain:<br>
&gt;<br>
&gt; &nbsp; &nbsp;PROJECT(executable_a)<br>
&gt;<br>
&gt; &nbsp; &nbsp;ADD_SUBDIRECTORY(../../components/a a)<br>
&gt;<br>
&gt; And /products/executable_b/CMakeLists.txt to contain:<br>
&gt;<br>
&gt; &nbsp; &nbsp;PROJECT(executable_b)<br>
&gt;<br>
&gt; &nbsp; &nbsp;ADD_SUBDIRECTORY(../../components/b b)<br>
&gt;<br>
&gt; And /products/executable_c/CMakeLists.txt to contain:<br>
&gt;<br>
&gt; &nbsp; &nbsp;PROJECT(executable_c)<br>
&gt;<br>
&gt; &nbsp; &nbsp;ADD_SUBDIRECTORY(../../components/a a)<br>
&gt; &nbsp; &nbsp;ADD_SUBDIRECTORY(../../components/b b)<br>
&gt;<br>
&gt; So I have each executable using ADD_SUBDIRECTORY to get the components
it<br>
&gt; needs. The problem obviously is that the CMakeLists.txt for components
a and<br>
&gt; b are included twice, producing duplicate targets that CMake doesn't
like. I<br>
&gt; was thinking that this was similar to header files in C/C++, and in
that<br>
&gt; world every header files uses an include guard to prevent duplication.
So is<br>
&gt; there a way in CMake to implement include guards, or rather ADD_SUBDIRECTORY<br>
&gt; guards?<br>
&gt;<br>
&gt; Or, am I headed down the wrong path entirely?<br>
&gt;<br>
&gt; ---------------------------------------------------------<br>
&gt; Aaron Wright<br>
&gt; _______________________________________________<br>
&gt; Powered by www.kitware.com<br>
&gt;<br>
&gt; Visit other Kitware open-source projects at<br>
&gt; </font></tt><a href=http://www.kitware.com/opensource/opensource.html><tt><font size=2>http://www.kitware.com/opensource/opensource.html<br>
&gt;<br>
&gt; Please keep messages on-topic and check the CMake FAQ at:<br>
&gt; </font></tt><a href=http://www.cmake.org/Wiki/CMake_FAQ><tt><font size=2>http://www.cmake.org/Wiki/CMake_FAQ<br>
&gt;<br>
&gt; Follow this link to subscribe/unsubscribe:<br>
&gt; </font></tt><a href=http://www.cmake.org/mailman/listinfo/cmake><tt><font size=2>http://www.cmake.org/mailman/listinfo/cmake<br>
&gt;<br>
_______________________________________________<br>
Powered by www.kitware.com<br>
<br>
Visit other Kitware open-source projects at </font></tt><a href=http://www.kitware.com/opensource/opensource.html><tt><font size=2>http://www.kitware.com/opensource/opensource.html<br>
<br>
Please keep messages on-topic and check the CMake FAQ at: </font></tt><a href=http://www.cmake.org/Wiki/CMake_FAQ><tt><font size=2>http://www.cmake.org/Wiki/CMake_FAQ<br>
<br>
Follow this link to subscribe/unsubscribe:<br>
</font></tt><a href=http://www.cmake.org/mailman/listinfo/cmake><tt><font size=2>http://www.cmake.org/mailman/listinfo/cmake<br>
</font></tt></a></a></a></a></a></a>
<br>