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