Hi Michael,
On Thu, Dec 2, 2010 at 19:40, Michael Hertling <mhertl...@online.de> wrote: > On 12/01/2010 06:03 PM, Raymond Wan wrote: >> Ah! I see. Then is it recommended that this top-level CMakeLists.txt >> have just these lines, or should I move the ADD_EXECUTABLE, etc. lines >> here as well? Or is this really "up to me" and there isn't a >> suggested paradigm? > > Basically, IMO, a CMakeLists.txt with ADD_EXECUTABLE() et al. should be > placed in the same directory as the related source files unless there's > a reason not to do so; this makes for modularity and a well organized > code base. The above-mentioned directory structure with its top-level > CMakeLists.txt containing just ADD_SUBDIRECTORY() commands keeps the > modules main, dir-A and dir-B separate with minimal interconnections. > In the previous structure, e.g., main/CMakeLists.txt had to know that > dir-A resides in "../dir-A"; now, such information is concentrated in > the top-level CMakeLists.txt, and the sole reference of main to dir-A > is the target "subprogA_ar". Due to CMake's capabilities to track the > dependencies among targets, it doesn't matter where dir-A is placed > within the project's source tree. So, in short, don't move the > ADD_EXECUTABLE() etc. to the top-level CMakeLists.txt. I see -- I did not realize this point you made about CMake's dependency tracking abilities. So, basically the only thing I need to worry about is the order of the ADD_SUBDIRECTORY ()'s. As long as I put ADD_SUBDIRECTORY (dir-A) before ADD_SUBDIRECTORY (main) then "main" will be built correctly? But, if I am not mistaken and following what you are saying, I can only build "main" using the top-level CMakeLists.txt. The lower CMakeLists.txt in main/ does not know the location of "dir-A". The only way for both to work is to have this in main/CMakeLists.txt: ADD_SUBDIRECTORY(../dir-A ${CMAKE_CURRENT_BINARY_DIR}/dir-A) yet this kind of duplication should be an error at worse; unnecessary repetition at best? > The top-level directory of non-trivial projects should not contain any > source files, perhaps a config.h header or the like. Usually, there're > enough things gathering in a project's root, e.g. READMEs, subdirs for > documentation, resources or CMake stuff, a CMakeLists.txt file ;) etc. > The sources, however, should be organized in their own subdirectories, > so the top-level CMakeLists.txt typically contains ADD_SUBDIRECTORY() > commands along with configurational stuff like setting up compiler > flags, processing options or investigating the underlying system, > but no ADD_EXECUTABLE() or the like. > > Of course, there're exceptions and probably strong different opinions. I see! Thank you for this! I'll stick with standard practice for now and leave the exceptions and stronger opposing opinions to people who know more about CMake than me. :-) Thank you very much for the explanation! Ray _______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake