mirror of
https://github.com/TheLartians/ModernCppStarter.git
synced 2025-08-30 21:51:12 +02:00
Fix install target Update cmake-format config file Format all cmake files. Update CPM.cmake version. Use FILE_SET HEADER to verify and install the header files. Prevent build problems caused by CPM_USE_LOCAL_PACKAGES Prevent problems with doctest if local found
101 lines
3.2 KiB
CMake
101 lines
3.2 KiB
CMake
# SPDX-FileCopyrightText: 2012-2021 Istituto Italiano di Tecnologia (IIT) SPDX-FileCopyrightText:
|
|
# 2008-2013 Kitware Inc. SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
#[=======================================================================[.rst:
|
|
AddUninstallTarget
|
|
------------------
|
|
|
|
Add the "uninstall" target for your project::
|
|
|
|
include(AddUninstallTarget)
|
|
|
|
|
|
will create a file ``cmake_uninstall.cmake`` in the build directory and add a
|
|
custom target ``uninstall`` (or ``UNINSTALL`` on Visual Studio and Xcode) that
|
|
will remove the files installed by your package (using
|
|
``install_manifest.txt``).
|
|
See also
|
|
https://gitlab.kitware.com/cmake/community/wikis/FAQ#can-i-do-make-uninstall-with-cmake
|
|
|
|
The :module:`AddUninstallTarget` module must be included in your main
|
|
``CMakeLists.txt``. If included in a subdirectory it does nothing.
|
|
This allows you to use it safely in your main ``CMakeLists.txt`` and include
|
|
your project using ``add_subdirectory`` (for example when using it with
|
|
:cmake:module:`FetchContent`).
|
|
|
|
If the ``uninstall`` target already exists, the module does nothing.
|
|
#]=======================================================================]
|
|
|
|
# AddUninstallTarget works only when included in the main CMakeLists.txt
|
|
if(NOT "${CMAKE_CURRENT_BINARY_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
|
|
return()
|
|
endif()
|
|
|
|
# The name of the target is uppercase in MSVC and Xcode (for coherence with the other standard
|
|
# targets)
|
|
if("${CMAKE_GENERATOR}" MATCHES "^(Visual Studio|Xcode)")
|
|
set(_uninstall "UNINSTALL")
|
|
else()
|
|
set(_uninstall "uninstall")
|
|
endif()
|
|
|
|
# If target is already defined don't do anything
|
|
if(TARGET ${_uninstall})
|
|
return()
|
|
endif()
|
|
|
|
set(_filename cmake_uninstall.cmake)
|
|
|
|
file(
|
|
WRITE "${CMAKE_CURRENT_BINARY_DIR}/${_filename}"
|
|
"if(NOT EXISTS \"${CMAKE_CURRENT_BINARY_DIR}/install_manifest.txt\")
|
|
message(WARNING \"Cannot find install manifest: \\\"${CMAKE_CURRENT_BINARY_DIR}/install_manifest.txt\\\"\")
|
|
return()
|
|
endif()
|
|
|
|
file(READ \"${CMAKE_CURRENT_BINARY_DIR}/install_manifest.txt\" files)
|
|
string(STRIP \"\${files}\" files)
|
|
string(REGEX REPLACE \"\\n\" \";\" files \"\${files}\")
|
|
list(REVERSE files)
|
|
foreach(file \${files})
|
|
if(IS_SYMLINK \"\$ENV{DESTDIR}\${file}\" OR EXISTS \"\$ENV{DESTDIR}\${file}\")
|
|
message(STATUS \"Uninstalling: \$ENV{DESTDIR}\${file}\")
|
|
execute_process(
|
|
COMMAND \${CMAKE_COMMAND} -E remove \"\$ENV{DESTDIR}\${file}\"
|
|
OUTPUT_VARIABLE rm_out
|
|
RESULT_VARIABLE rm_retval)
|
|
if(NOT \"\${rm_retval}\" EQUAL 0)
|
|
message(FATAL_ERROR \"Problem when removing \\\"\$ENV{DESTDIR}\${file}\\\"\")
|
|
endif()
|
|
else()
|
|
message(STATUS \"Not-found: \$ENV{DESTDIR}\${file}\")
|
|
endif()
|
|
endforeach(file)
|
|
"
|
|
)
|
|
|
|
set(_desc "Uninstall the project...")
|
|
if(CMAKE_GENERATOR STREQUAL "Unix Makefiles")
|
|
set(_comment
|
|
COMMAND
|
|
\$\(CMAKE_COMMAND\)
|
|
-E
|
|
cmake_echo_color
|
|
--switch=$\(COLOR\)
|
|
--cyan
|
|
"${_desc}"
|
|
)
|
|
else()
|
|
set(_comment COMMENT "${_desc}")
|
|
endif()
|
|
add_custom_target(
|
|
${_uninstall}
|
|
${_comment}
|
|
COMMAND ${CMAKE_COMMAND} -P ${_filename}
|
|
USES_TERMINAL
|
|
BYPRODUCTS uninstall_byproduct
|
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
|
|
)
|
|
set_property(SOURCE uninstall_byproduct PROPERTY SYMBOLIC 1)
|
|
|
|
set_property(TARGET ${_uninstall} PROPERTY FOLDER "CMakePredefinedTargets")
|