<div dir="ltr">In the build directory, the build rules are generally like the would be in the source too... so you can just go into src/libwhatever and do 'make' in that branch.<br>like if your target was visual studio or some IDE, you could click on a single project to build, and it would of course check and build related projects.<div><br></div><div>basically you don't even need ../ inclusions just a root that add_subdirectory( lib1 ) ... 2, 3, utils (which itself adds other utiliy thins that reference other lib targets )...</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Oct 14, 2019 at 11:11 AM Fred Baksik <<a href="mailto:fdk17@ftml.net">fdk17@ftml.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><u></u><div><div><br></div><div><br></div><div>On Mon, Oct 14, 2019, at 9:13 AM, David Aldrich wrote:<br></div><blockquote type="cite" id="gmail-m_6291133941196450966qt"><div dir="ltr"><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt">Hi</span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"> </span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt">I am trying to convert a large software project from makefiles
to CMake. The project is organised as a set of shared ‘star’ libraries, linked
to a static ‘kernel’ library. The current directory arrangement is:</span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"> </span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"><span style="font-family:"Courier New""><span style="font-size:8pt">|--stars</span></span></span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"><span style="font-family:"Courier New""><span style="font-size:8pt">| |--
star1_lib</span></span></span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"><span style="font-family:"Courier New""><span style="font-size:8pt">| |--
source files</span></span></span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"><span style="font-family:"Courier New""><span style="font-size:8pt">| |--
makefile</span></span></span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"><span style="font-family:"Courier New""><span style="font-size:8pt">| |-- star2_lib</span></span></span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"><span style="font-family:"Courier New""><span style="font-size:8pt">| |-- source files</span></span></span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"><span style="font-family:"Courier New""><span style="font-size:8pt">| |-- makefile</span></span></span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"><span style="font-family:"Courier New""><span style="font-size:8pt">| |-- solibs</span></span></span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"><span style="font-family:"Courier New""><span style="font-size:8pt">| |-- Release</span></span></span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"><span style="font-family:"Courier New""><span style="font-size:8pt">| |-- <star>.so files</span></span></span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"><span style="font-family:"Courier New""><span style="font-size:8pt">|</span></span></span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"><span style="font-family:"Courier New""><span style="font-size:8pt">|--kernel</span></span></span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"><span style="font-family:"Courier New""><span style="font-size:8pt">| |-- source files</span></span></span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"><span style="font-family:"Courier New""><span style="font-size:8pt">| |-- makefile</span></span></span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"><span style="font-family:"Courier New""><span style="font-size:8pt">| |-- Release</span></span></span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"><span style="font-family:"Courier New""><span style="font-size:8pt">| |-- kernel.a</span></span></span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"><span style="font-family:"Courier New""><span style="font-size:8pt">|</span></span></span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"><span style="font-family:"Courier New""><span style="font-size:8pt">|--application</span></span></span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"><span style="font-family:"Courier New""><span style="font-size:8pt"> |--
makefile</span></span></span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"><span style="font-family:"Courier New""><span style="font-size:8pt"> |--
Release</span></span></span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"><span style="font-family:"Courier New""><span style="font-size:8pt"> |--
myapp.exe</span></span></span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"><span style="font-family:"Courier New""><span style="font-size:8pt"> </span></span></span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt">In high-level terms, how could I implement this using CMake,
such that invoking ‘make’ in directory ‘application’ invokes a make of each shared
and static library, and links them to form ‘myapp.exe’?</span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"><a name="m_6291133941196450966__MailAutoSig"> </a></span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt">(I understand the basics of CMake,
the issue here is how to handle the make of source code and libraries spread
across a directory hierarchy).</span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"> </span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt">Best regards</span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt"> </span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><span style="font-family:Calibri,sans-serif"><span style="font-size:11pt">David</span></span><br></p><p style="margin:0cm 0cm 0.0001pt"><br></p></div><div><br></div></blockquote><div>add_subdirectory() can accept relative paths to outside the "root" source tree.<br></div><div>So the main CMakeLists.txt would be located in ./application.<br></div><div>Then do:<br></div><div> add_subdirectory(../kernel kernel)<br></div><div>add_subdirectory(../stars/stars1_lib stars1_lib)<br></div><div><br></div><div>./kernel/CMakeLists.txt would list it's files, and etcetera.<br></div><div><br></div><div>I've use this method in the past for handling applications that are meant to target Windows, Linux, and embedded systems.<br></div><div>Then by using variables to determine with platform / target ertain kernel and library characteristics are used.<br></div><div>Everything is built in the build directory for that particular platform / target.<br></div><div>This allows for app_target1, app_target2, app_target3, ..., build directories to be totally independent.<br></div><div><br></div><div>--<br></div><div>F<br></div></div>-- <br>
<br>
Powered by <a href="http://www.kitware.com" rel="noreferrer" target="_blank">www.kitware.com</a><br>
<br>
Please keep messages on-topic and check the CMake FAQ at: <a href="http://www.cmake.org/Wiki/CMake_FAQ" rel="noreferrer" target="_blank">http://www.cmake.org/Wiki/CMake_FAQ</a><br>
<br>
Kitware offers various services to support the CMake community. For more information on each offering, please visit:<br>
<br>
CMake Support: <a href="http://cmake.org/cmake/help/support.html" rel="noreferrer" target="_blank">http://cmake.org/cmake/help/support.html</a><br>
CMake Consulting: <a href="http://cmake.org/cmake/help/consulting.html" rel="noreferrer" target="_blank">http://cmake.org/cmake/help/consulting.html</a><br>
CMake Training Courses: <a href="http://cmake.org/cmake/help/training.html" rel="noreferrer" target="_blank">http://cmake.org/cmake/help/training.html</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" rel="noreferrer" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="https://cmake.org/mailman/listinfo/cmake" rel="noreferrer" target="_blank">https://cmake.org/mailman/listinfo/cmake</a><br>
</blockquote></div>