<div dir="ltr"><div>I believe I may have stumbled on a work-around for this problem.</div><div><br></div><div>I simply added these two lines to the top-level CMakeLists.txt:</div><div><br></div><div>SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR})</div><div>SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR})</div><div><br></div><div>They obviously tell cmake to generate a VS solution that puts the</div><div>exe files and libs in the same directory. This is what happens when</div><div>you manually create a solution in Visual Studio and (apparently)</div><div>changes the way VS deals with dependencies between exe projects and</div><div>the lib projects they depend on.</div><div><br></div><div>I haven't experimented with more complex projects but, at least, it</div><div>fixes this simple case.</div><div><br></div><div>Bill</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Oct 3, 2014 at 9:07 AM, Bill Greene <span dir="ltr"><<a href="mailto:w.h.greene@gmail.com" target="_blank">w.h.greene@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Thanks for the link and the suggestions. I read through the posting several times to try to understand the<div>issues.</div><div><br></div><div>I added these lines:</div><div><br></div><div><div>SET_SOURCE_FILES_PROPERTIES(</div><div>    cmTestMain.cpp PROPERTIES OBJECT_DEPENDS</div><div>    ${CMAKE_BINARY_DIR}/cmTestLib/Debug/cmTestLib.lib</div><div>)</div></div><div><br></div><div>to the CMakeLists.txt for the main program. (I checked to make sure the path to the library</div><div>is correct). Unfortunately, this didn't fix the build problem.</div><div><br></div><div>As I mentioned in my original post, it looks to me like the VS solution generate by cmake *should*</div><div>be doing the right thing but there is some VS subtlety that is coming into play here ;-(</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote"><span class="">On Fri, Oct 3, 2014 at 3:55 AM, Jakub Zakrzewski <span dir="ltr"><<a href="mailto:jzakrzewski@e2e.ch" target="_blank">jzakrzewski@e2e.ch</a>></span> wrote:<br></span><div><div class="h5"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="DE-CH" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Hi,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">if I'm not mistaken, the build system only tracks source dependencies, so unless the changed code is shared by both library and main, it'll not rebuild the
 main. <u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">One solution could be:<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New"">SET_SOURCE_FILES_PROPERTIES(<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New"">   
</span><span style="font-family:"Courier New"">cmTestMain.cpp</span><span style="font-size:11.0pt;font-family:"Courier New""> PROPERTIES OBJECT_DEPENDS<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New"">    ${CMAKE_CURRENT_BINARY_DIR}/</span><span style="font-family:"Courier New"">cmTestLib</span><span style="font-size:11.0pt;font-family:"Courier New"">/</span><span style="font-family:"Courier New"">libcmTestLib</span><span style="font-size:11.0pt;font-family:"Courier New"">.a<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New"">)<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">As described here:
<a href="http://www.cmake.org/pipermail/cmake/2010-November/041049.html" target="_blank">http://www.cmake.org/pipermail/cmake/2010-November/041049.html</a>
<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">(I might have used wrongpaths but you get the idea)<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="PL" style="font-size:11.0pt;font-family:"Courier New";color:#1f497d">--<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="PL" style="font-size:11.0pt;font-family:"Courier New";color:#1f497d">Gruesse,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="PL" style="font-size:11.0pt;font-family:"Courier New";color:#1f497d">Jakub<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> CMake [mailto:<a href="mailto:cmake-bounces@cmake.org" target="_blank">cmake-bounces@cmake.org</a>]
<b>On Behalf Of </b>Bill Greene<br>
<b>Sent:</b> Freitag, 3. Oktober 2014 01:58<br>
<b>To:</b> Michael Jackson<br>
<b>Cc:</b> <a href="mailto:cmake@cmake.org" target="_blank">cmake@cmake.org</a><br>
<b>Subject:</b> Re: [CMake] Main program not getting rebuilt when library changes.<u></u><u></u></span></p>
</div><div><div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">I replaced the CMakeLists.txt for the library (cmTestLib) with simply this:<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">add_library (cmTestLib STATIC MySub.cpp MySub.h)<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">And I see exactly the same problem with the main program not getting rebuilt.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">So I believe the GLOB issue is irrelevant to this particular problem.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Bill<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">On Thu, Oct 2, 2014 at 6:55 PM, Michael Jackson <<a href="mailto:mike.jackson@bluequartz.net" target="_blank">mike.jackson@bluequartz.net</a>> wrote:<u></u><u></u></p>
<div>
<p class="MsoNormal">This probably is not completely your issue but I am sure it has something to do with it. From the help for the "FILE" command:<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<div>
<p class="MsoNormal">GLOB will generate a list of all files that match the globbing<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">expressions and store it into the variable.  Globbing expressions are<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">similar to regular expressions, but much simpler.  If RELATIVE flag is<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">specified for an expression, the results will be returned as a<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">relative path to the given path.  (We do not recommend using GLOB to<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">collect a list of source files from your source tree.  If no<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">CMakeLists.txt file changes when a source is added or removed then the<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">generated build system cannot know when to ask CMake to regenerate.)<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Take away: Do NOT use GLOB to find source files. List them out one by one in the CMake file.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Try that and let us know if it works as you would expect it to.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Mike Jackson<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"><br clear="all">
<u></u><u></u></p>
<div>
<p class="MsoNormal">_________________________________________________________<br>
Mike Jackson                  <a href="mailto:mike.jackson@bluequartz.net" target="_blank">
mike.jackson@bluequartz.net</a><br>
BlueQuartz Software                    <a href="http://www.bluequartz.net" target="_blank">
www.bluequartz.net</a><br>
Principal Software Engineer                  Dayton, Ohio<u></u><u></u></p>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<div>
<p class="MsoNormal">On Thu, Oct 2, 2014 at 3:38 PM, Bill Greene <<a href="mailto:w.h.greene@gmail.com" target="_blank">w.h.greene@gmail.com</a>> wrote:<u></u><u></u></p>
</div>
</div>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<div>
<p class="MsoNormal">Hi,<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I'm trying to build a trivial project with cmake 3.0 and Visual Studio 2013.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">The project has a top-level directory, a sub-directory with the main program,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">and a sub-directory that builds a static library that the main program depends on.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">It all builds fine the first time. Then I change a routine in the library and rebuild.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">The static library gets rebuilt but the main program does not get re-linked.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I have perused the cmake-built VS project for hours and it looks fine to me; the<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">main program depends on the library as expected. I can't figure out why the main<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">program is not being rebuilt.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">More embarrassing, I can easily build a similar VS project by hand that behaves as<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">expected but I can' find the significant difference between the two that is causing the<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">problematic behavior.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">If anyone has any insights on this I would be very appreciative.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Here are my three CMakeLists.txt files:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">top level:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">-----------<u></u><u></u></p>
</div>
<div>
<div>
<p class="MsoNormal">cmake_minimum_required (VERSION 2.8)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">project(cmTest)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">add_subdirectory (cmTestMain)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">add_subdirectory (cmTestLib)<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">cmTestLib<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">--------------<u></u><u></u></p>
</div>
<div>
<div>
<p class="MsoNormal">FILE(GLOB SRC *.cpp)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">FILE(GLOB H_FILES *.h)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">add_library (cmTestLib STATIC ${SRC} ${H_FILES})<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">cmTestMain<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">----------------<u></u><u></u></p>
</div>
<div>
<div>
<p class="MsoNormal">include_directories (${cmTest_SOURCE_DIR}/cmTestLib)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">add_executable (cmTestMain cmTestMain.cpp)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">target_link_libraries (cmTestMain cmTestLib)<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="color:#888888"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:#888888">Bill<u></u><u></u></span></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
<p class="MsoNormal">--<br>
<br>
Powered by <a href="http://www.kitware.com" 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" 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" target="_blank">
http://cmake.org/cmake/help/support.html</a><br>
CMake Consulting: <a href="http://cmake.org/cmake/help/consulting.html" target="_blank">
http://cmake.org/cmake/help/consulting.html</a><br>
CMake Training Courses: <a href="http://cmake.org/cmake/help/training.html" 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" target="_blank">
http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://public.kitware.com/mailman/listinfo/cmake" target="_blank">http://public.kitware.com/mailman/listinfo/cmake</a><u></u><u></u></p>
</blockquote>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div></div></div>
</div>

</blockquote></div></div></div><br></div>
</blockquote></div><br></div>