I'd rather make it as hard as possible to form bad habits. It would also be helpful to me. I've moved to the console and typed "cmake ." several times thinking I was in the build directory, and then cussed quite a bit while digging through removing cruft. (Points on Version Control taken, I'll take care of that shortly...)
Aaron C. Meadows -----Original Message----- From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On Behalf Of kent williams Sent: Thursday, October 07, 2010 12:55 PM To: CMake ML Subject: Re: [CMake] Disallowing in-source builds You could try, though it makes my brain hurt to think about it. Why go to such lengths to protect users from themselves? On Thu, Oct 7, 2010 at 11:57 AM, <aaron.mead...@thomsonreuters.com> wrote: > Yeah, I think I'll go with something like what you are saying. I wonder > if I can remove the CMakeFiles directory and the CMakeCache.txt file > from within the CMakeLists script... > > Aaron C. Meadows > >> Hi all. >> >> >> >> Is there a good way to disallow in-source builds? Ideally, I'd like > to >> prevent it before any cruft is written into the source tree. I >> experimented with writing a function into my CMakelists file and > calling >> it. The function checked if CMAKE_BINARY_DIR was equal to >> CMAKE_SOURCE_DIR and messaged a FATAL_ERROR if that was the case. > This >> works ok, but still generates a CMakeFiles directory and a >> CMakeCache.txt file. > > I don't think there's a way to prevent that from happening. The bad > thing about this is that if the user doesn't clean away the in-source > CMakeCache.txt file, subsequent out-of-source builds will fail. Perhaps > you can do something like this: > > # check for polluted source tree > if(EXISTS ${CMAKE_SOURCE_DIR}/CMakeCache.txt OR > EXISTS ${CMAKE_SOURCE_DIR}/CMakeFiles) > message(FATAL_ERROR > "CMakeCache.txt or CMakeFiles exists in source directory!") > endif() > # make sure the user doesn't play dirty with symlinks > get_filename_component(srcdir "${CMAKE_SOURCE_DIR}" REALPATH) > get_filename_component(bindir "${CMAKE_BINARY_DIR}" REALPATH) > # disallow in-source builds > if(${srcdir} STREQUAL ${bindir}) > message(FATAL_ERROR "In-source builds are forbidden!") > endif() > >> >> The second half of the question is of course, is there an easy way to >> clean out a source tree if an in-source build was accidentally kicked >> off? (short of dividing the files by their timestamp and removing the >> newer ones, etc..) > > No, simply because CMake cannot. Your build system might have something > like the following: > > execute_process(COMMAND echo "BOOM" > ${CMAKE_BINARY_DIR}/boom.txt > VERBATIM) > > CMake never knows that the file boom.txt is written, and therefor can't > clean it away. The only reasonable way I know of is using git > (http://git-scm.com): > > git clean -df > > will remove all the files and directories that are not part of the > repository. With tar-ball builds it's easier. Just wipe the source tree > and unpack again. > > > Michael > > This email was sent to you by Thomson Reuters, the global news and > information company. > Any views expressed in this message are those of the individual sender, > except where the sender specifically states them to be the views of Thomson > Reuters. > > > _______________________________________________ > 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 > _______________________________________________ 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 This email was sent to you by Thomson Reuters, the global news and information company. Any views expressed in this message are those of the individual sender, except where the sender specifically states them to be the views of Thomson Reuters. _______________________________________________ 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