cmlib/CMLibDisableInSourceBuild.cmake

30 lines
1.4 KiB
CMake
Raw Normal View History

2019-02-12 16:31:17 +00:00
# Запись результатов сборки проекта внутрь иерархии каталогов
# с исходными текстами приводит к засорению файлами формируемыми
# на этапе сборки, которые затрудняют разработку, поиск в оригинальных
# файлах и мешают ориентироваться в проекте. При работе с несколькими
# типами сборки, например, отладка и выпуск, появляется необходимость
# корректного полного удаления результатов предыдущего варианта.
get_filename_component(_source_realpath "${CMAKE_SOURCE_DIR}" REALPATH)
get_filename_component(_binary_realpath "${CMAKE_BINARY_DIR}" REALPATH)
if(${_source_realpath} STREQUAL ${_binary_realpath})
message(FATAL_ERROR "In-source builds are not allowed.")
endif()
# Очистка от сгенерированных файлов
file(GLOB_RECURSE _cmakelists_files RELATIVE ${_source_realpath} CMakeLists.txt)
foreach(_it ${_cmakelists_files})
get_filename_component(_file ${_it} REALPATH)
get_filename_component(_dir ${_file} DIRECTORY)
file(REMOVE_RECURSE
${_dir}/CMakeFiles
${_dir}/CMakeCache.txt
${_dir}/cmake_install.cmake
${_dir}/Makefile
${_dir}/build.ninja
${_dir}/rules.ninja
)
endforeach()