On 6. Oct, 2010, at 20:10 , <aaron.mead...@thomsonreuters.com> <aaron.mead...@thomsonreuters.com> wrote:
> 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
PGP.sig
Description: This is a digitally signed message part
_______________________________________________ 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