You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
480 lines
16 KiB
480 lines
16 KiB
# Copyright (c) 2022, ETH Zurich and UNC Chapel Hill.
|
|
# All rights reserved.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions are met:
|
|
#
|
|
# * Redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
#
|
|
# * Redistributions in binary form must reproduce the above copyright
|
|
# notice, this list of conditions and the following disclaimer in the
|
|
# documentation and/or other materials provided with the distribution.
|
|
#
|
|
# * Neither the name of ETH Zurich and UNC Chapel Hill nor the names of
|
|
# its contributors may be used to endorse or promote products derived
|
|
# from this software without specific prior written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
|
|
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
# POSSIBILITY OF SUCH DAMAGE.
|
|
#
|
|
# Author: Johannes L. Schoenberger (jsch-at-demuc-dot-de)
|
|
|
|
cmake_minimum_required(VERSION 3.0)
|
|
|
|
project(COLMAP)
|
|
|
|
set(COLMAP_VERSION "3.8")
|
|
set(COLMAP_VERSION_NUMBER "3800")
|
|
|
|
|
|
################################################################################
|
|
# Include CMake dependencies
|
|
################################################################################
|
|
|
|
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
|
|
|
include(CheckCXXCompilerFlag)
|
|
|
|
# Include helper macros and commands, and allow the included file to override
|
|
# the CMake policies in this file
|
|
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/CMakeHelper.cmake NO_POLICY_SCOPE)
|
|
|
|
|
|
################################################################################
|
|
# Options
|
|
################################################################################
|
|
|
|
option(SIMD_ENABLED "Whether to enable SIMD optimizations" ON)
|
|
option(OPENMP_ENABLED "Whether to enable OpenMP parallelization" ON)
|
|
option(IPO_ENABLED "Whether to enable interprocedural optimization" ON)
|
|
option(CUDA_ENABLED "Whether to enable CUDA, if available" ON)
|
|
option(GUI_ENABLED "Whether to enable the graphical UI" ON)
|
|
option(OPENGL_ENABLED "Whether to enable OpenGL, if available" ON)
|
|
option(TESTS_ENABLED "Whether to build test binaries" OFF)
|
|
option(ASAN_ENABLED "Whether to enable AddressSanitizer flags" OFF)
|
|
option(PROFILING_ENABLED "Whether to enable google-perftools linker flags" OFF)
|
|
option(CCACHE_ENABLED "Whether to enable compiler caching, if available" ON)
|
|
option(CGAL_ENABLED "Whether to enable the CGAL library" ON)
|
|
option(BOOST_STATIC "Whether to enable static boost library linker flags" ON)
|
|
set(CUDA_ARCHS "Auto" CACHE STRING "List of CUDA architectures for which to \
|
|
generate code, e.g., Auto, All, Maxwell, Pascal, ...")
|
|
|
|
if(TESTS_ENABLED)
|
|
enable_testing()
|
|
endif()
|
|
|
|
if(BOOST_STATIC)
|
|
set(Boost_USE_STATIC_LIBS ON)
|
|
else()
|
|
add_definitions("-DBOOST_TEST_DYN_LINK")
|
|
endif()
|
|
|
|
################################################################################
|
|
# Find packages
|
|
################################################################################
|
|
|
|
if(OPENMP_ENABLED)
|
|
find_package(OpenMP QUIET)
|
|
endif()
|
|
|
|
find_package(Ceres REQUIRED)
|
|
|
|
find_package(Boost REQUIRED COMPONENTS
|
|
program_options
|
|
filesystem
|
|
graph
|
|
system
|
|
unit_test_framework)
|
|
|
|
find_package(Eigen3 REQUIRED)
|
|
|
|
find_package(FreeImage REQUIRED)
|
|
|
|
find_package(Metis REQUIRED)
|
|
|
|
find_package(Glog REQUIRED)
|
|
|
|
set(OpenGL_GL_PREFERENCE GLVND)
|
|
find_package(OpenGL REQUIRED)
|
|
find_package(Glew REQUIRED)
|
|
find_package(Git)
|
|
|
|
if(CGAL_ENABLED)
|
|
set(CGAL_DO_NOT_WARN_ABOUT_CMAKE_BUILD_TYPE TRUE)
|
|
find_package(CGAL QUIET)
|
|
endif()
|
|
|
|
set(CUDA_MIN_VERSION "7.0")
|
|
if(CUDA_ENABLED)
|
|
find_package(CUDA ${CUDA_MIN_VERSION} QUIET)
|
|
endif()
|
|
|
|
if(GUI_ENABLED)
|
|
find_package(Qt5 5.4 COMPONENTS Core OpenGL Widgets)
|
|
if(Qt5_FOUND)
|
|
message(STATUS "Found Qt")
|
|
message(STATUS " Module : ${Qt5Core_DIR}")
|
|
message(STATUS " Module : ${Qt5OpenGL_DIR}")
|
|
message(STATUS " Module : ${Qt5Widgets_DIR}")
|
|
else()
|
|
set(GUI_ENABLED OFF)
|
|
endif()
|
|
endif()
|
|
|
|
if(OPENGL_ENABLED AND NOT GUI_ENABLED)
|
|
message(STATUS "Disabling GUI will also disable OpenGL")
|
|
set(OPENGL_ENABLED OFF)
|
|
endif()
|
|
|
|
if(CGAL_FOUND)
|
|
list(APPEND CGAL_LIBRARY ${CGAL_LIBRARIES})
|
|
message(STATUS "Found CGAL")
|
|
message(STATUS " Includes : ${CGAL_INCLUDE_DIRS}")
|
|
message(STATUS " Libraries : ${CGAL_LIBRARY}")
|
|
endif()
|
|
|
|
|
|
################################################################################
|
|
# Compiler specific configuration
|
|
################################################################################
|
|
|
|
if(CMAKE_BUILD_TYPE)
|
|
message(STATUS "Build type specified as ${CMAKE_BUILD_TYPE}")
|
|
else()
|
|
message(STATUS "Build type not specified, using Release")
|
|
set(CMAKE_BUILD_TYPE Release)
|
|
set(IS_DEBUG OFF)
|
|
endif()
|
|
|
|
if(IS_MSVC)
|
|
# Some fixes for the Glog library.
|
|
add_definitions("-DGLOG_NO_ABBREVIATED_SEVERITIES")
|
|
add_definitions("-DGL_GLEXT_PROTOTYPES")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
|
|
# Enable object level parallel builds in Visual Studio.
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
|
|
endif()
|
|
|
|
if(IS_GNU)
|
|
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9)
|
|
message(FATAL_ERROR "GCC version 4.8 or older not supported")
|
|
endif()
|
|
|
|
# Hide incorrect warnings for uninitialized Eigen variables under GCC.
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-maybe-uninitialized")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-maybe-uninitialized")
|
|
endif()
|
|
|
|
if(IS_DEBUG)
|
|
add_definitions("-DEIGEN_INITIALIZE_MATRICES_BY_NAN")
|
|
endif()
|
|
|
|
if(SIMD_ENABLED)
|
|
message(STATUS "Enabling SIMD support")
|
|
else()
|
|
message(STATUS "Disabling SIMD support")
|
|
endif()
|
|
|
|
if(OPENMP_ENABLED AND OPENMP_FOUND)
|
|
message(STATUS "Enabling OpenMP support")
|
|
add_definitions("-DOPENMP_ENABLED")
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
|
|
else()
|
|
message(STATUS "Disabling OpenMP support")
|
|
endif()
|
|
|
|
if(IPO_ENABLED AND NOT IS_DEBUG AND NOT IS_GNU)
|
|
message(STATUS "Enabling interprocedural optimization")
|
|
set_property(DIRECTORY PROPERTY INTERPROCEDURAL_OPTIMIZATION 1)
|
|
else()
|
|
message(STATUS "Disabling interprocedural optimization")
|
|
endif()
|
|
|
|
if(ASAN_ENABLED)
|
|
message(STATUS "Enabling ASan support")
|
|
if(IS_CLANG OR IS_GNU)
|
|
add_compile_options(-fsanitize=address -fno-omit-frame-pointer -fsanitize-address-use-after-scope)
|
|
add_link_options(-fsanitize=address)
|
|
else()
|
|
message(FATAL_ERROR "Unsupported compiler for ASan mode")
|
|
endif()
|
|
endif()
|
|
|
|
if(CUDA_FOUND)
|
|
if(CUDA_ENABLED)
|
|
add_definitions("-DCUDA_ENABLED")
|
|
|
|
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/SelectCudaComputeArch.cmake)
|
|
|
|
CUDA_SELECT_NVCC_ARCH_FLAGS(CUDA_ARCH_FLAGS ${CUDA_ARCHS})
|
|
|
|
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} ${CUDA_ARCH_FLAGS}")
|
|
|
|
# Fix for some combinations of CUDA and GCC (e.g. under Ubuntu 16.04).
|
|
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -D_FORCE_INLINES")
|
|
# Do not show warnings if the architectures are deprecated.
|
|
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -Wno-deprecated-gpu-targets")
|
|
|
|
message(STATUS "Enabling CUDA support (version: ${CUDA_VERSION_STRING},"
|
|
" archs: ${CUDA_ARCH_FLAGS_readable})")
|
|
else()
|
|
set(CUDA_FOUND OFF)
|
|
message(STATUS "Disabling CUDA support")
|
|
endif()
|
|
else()
|
|
set(CUDA_ENABLED OFF)
|
|
if(CUDA_VERSION_STRING)
|
|
message(STATUS "Disabling CUDA support (found version "
|
|
"${CUDA_VERSION_STRING} but >= ${CUDA_MIN_VERSION} required)")
|
|
else()
|
|
message(STATUS "Disabling CUDA support")
|
|
endif()
|
|
endif()
|
|
|
|
if(GUI_ENABLED AND Qt5_FOUND)
|
|
add_definitions("-DGUI_ENABLED")
|
|
message(STATUS "Enabling GUI support")
|
|
else()
|
|
message(STATUS "Disabling GUI support")
|
|
endif()
|
|
|
|
if(OPENGL_ENABLED)
|
|
add_definitions("-DOPENGL_ENABLED")
|
|
message(STATUS "Enabling OpenGL support")
|
|
else()
|
|
message(STATUS "Disabling OpenGL support")
|
|
endif()
|
|
|
|
if(CCACHE_ENABLED)
|
|
find_program(CCACHE ccache)
|
|
if(CCACHE)
|
|
message(STATUS "Enabling ccache support")
|
|
set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE})
|
|
set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE})
|
|
else()
|
|
message(STATUS "Disabling ccache support")
|
|
endif()
|
|
else()
|
|
message(STATUS "Disabling ccache support")
|
|
endif()
|
|
|
|
if(PROFILING_ENABLED)
|
|
message(STATUS "Enabling profiling support")
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -lprofiler -ltcmalloc")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lprofiler -ltcmalloc")
|
|
else()
|
|
message(STATUS "Disabling profiling support")
|
|
endif()
|
|
|
|
if(CGAL_FOUND AND CGAL_ENABLED)
|
|
message(STATUS "Enabling CGAL support")
|
|
add_definitions("-DCGAL_ENABLED")
|
|
else()
|
|
message(STATUS "Disabling CGAL support")
|
|
set(CGAL_ENABLED OFF)
|
|
endif()
|
|
|
|
if(Qt5_FOUND)
|
|
# Qt5 was built with -reduce-relocations.
|
|
if(Qt5_POSITION_INDEPENDENT_CODE)
|
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
if(CUDA_ENABLED AND NOT IS_MSVC)
|
|
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} --compiler-options -fPIC")
|
|
endif()
|
|
endif()
|
|
|
|
# Enable automatic compilation of Qt resource files.
|
|
set(CMAKE_AUTORCC ON)
|
|
endif()
|
|
|
|
################################################################################
|
|
# Add sources
|
|
################################################################################
|
|
|
|
# Generate source file with version definitions.
|
|
include(GenerateVersionDefinitions)
|
|
|
|
set(COLMAP_INCLUDE_DIRS
|
|
${Boost_INCLUDE_DIRS}
|
|
${EIGEN3_INCLUDE_DIRS}
|
|
${GLOG_INCLUDE_DIRS}
|
|
${FREEIMAGE_INCLUDE_DIRS}
|
|
${CERES_INCLUDE_DIRS}
|
|
${METIS_INCLUDE_DIRS}
|
|
${GLEW_INCLUDE_DIRS}
|
|
)
|
|
|
|
set(COLMAP_LINK_DIRS
|
|
${Boost_LIBRARY_DIRS}
|
|
)
|
|
|
|
set(COLMAP_EXTERNAL_LIBRARIES
|
|
${CMAKE_DL_LIBS}
|
|
${Boost_FILESYSTEM_LIBRARY}
|
|
${Boost_PROGRAM_OPTIONS_LIBRARY}
|
|
${Boost_SYSTEM_LIBRARY}
|
|
${GLOG_LIBRARIES}
|
|
${FREEIMAGE_LIBRARIES}
|
|
${METIS_LIBRARIES}
|
|
${CERES_LIBRARIES}
|
|
${OPENGL_LIBRARIES}
|
|
)
|
|
|
|
if(OPENMP_FOUND)
|
|
list(APPEND COLMAP_EXTERNAL_LIBRARIES ${OpenMP_libomp_LIBRARY})
|
|
endif()
|
|
|
|
if(Qt5_FOUND)
|
|
list(APPEND COLMAP_INCLUDE_DIRS ${Qt5Core_INCLUDE_DIRS} ${Qt5OpenGL_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS})
|
|
list(APPEND COLMAP_EXTERNAL_LIBRARIES ${Qt5Core_LIBRARIES} ${Qt5OpenGL_LIBRARIES} ${Qt5Widgets_LIBRARIES})
|
|
endif()
|
|
|
|
if(CGAL_FOUND)
|
|
list(APPEND COLMAP_INCLUDE_DIRS ${CGAL_INCLUDE_DIRS} ${GMP_INCLUDE_DIR})
|
|
list(APPEND COLMAP_EXTERNAL_LIBRARIES ${CGAL_LIBRARY} ${GMP_LIBRARIES})
|
|
list(APPEND COLMAP_LINK_DIRS ${CGAL_LIBRARIES_DIR})
|
|
endif()
|
|
|
|
if(UNIX)
|
|
list(APPEND COLMAP_EXTERNAL_LIBRARIES pthread)
|
|
endif()
|
|
|
|
set(COLMAP_INTERNAL_LIBRARIES
|
|
flann
|
|
lsd
|
|
pba
|
|
poisson_recon
|
|
sqlite3
|
|
sift_gpu
|
|
vlfeat
|
|
)
|
|
|
|
include_directories(
|
|
lib
|
|
src
|
|
${COLMAP_INCLUDE_DIRS}
|
|
)
|
|
|
|
link_directories(${COLMAP_LINK_DIRS})
|
|
|
|
add_subdirectory(lib)
|
|
add_subdirectory(src)
|
|
|
|
|
|
################################################################################
|
|
# Generate source groups for Visual Studio, XCode, etc.
|
|
################################################################################
|
|
|
|
COLMAP_ADD_SOURCE_DIR(lib/FLANN LIB_FLANN_SRCS *.h *.cpp *.hpp *.cu)
|
|
COLMAP_ADD_SOURCE_DIR(lib/LSD LIB_LSD_SRCS *.h *.c)
|
|
COLMAP_ADD_SOURCE_DIR(lib/PBA LIB_PBA_SRCS *.h *.cpp *.cu)
|
|
COLMAP_ADD_SOURCE_DIR(lib/PoissonRecon LIB_POISSON_RECON_SRCS *.h *.cpp *.inl)
|
|
COLMAP_ADD_SOURCE_DIR(lib/SiftGPU LIB_SIFT_GPU_SRCS *.h *.cpp *.cu)
|
|
COLMAP_ADD_SOURCE_DIR(lib/SQLite LIB_SQLITE_SRCS *.h *.c)
|
|
COLMAP_ADD_SOURCE_DIR(lib/VLFeat LIB_VLFEAT_SRCS *.h *.c *.tc)
|
|
|
|
COLMAP_ADD_SOURCE_DIR(src/base BASE_SRCS *.h *.cc)
|
|
COLMAP_ADD_SOURCE_DIR(src/controllers CONTROLLERS_SRCS *.h *.cc)
|
|
COLMAP_ADD_SOURCE_DIR(src/estimators ESTIMATORS_SRCS *.h *.cc)
|
|
COLMAP_ADD_SOURCE_DIR(src/exe EXE_SRCS *.h *.cc)
|
|
COLMAP_ADD_SOURCE_DIR(src/feature FEATURE_SRCS *.h *.cc)
|
|
COLMAP_ADD_SOURCE_DIR(src/mvs MVS_SRCS *.h *.cc *.cu)
|
|
COLMAP_ADD_SOURCE_DIR(src/optim OPTIM_SRCS *.h *.cc)
|
|
COLMAP_ADD_SOURCE_DIR(src/retrieval RETRIEVAL_SRCS *.h *.cc)
|
|
COLMAP_ADD_SOURCE_DIR(src/sfm SFM_SRCS *.h *.cc)
|
|
COLMAP_ADD_SOURCE_DIR(src/tools TOOLS_SRCS *.h *.cc)
|
|
COLMAP_ADD_SOURCE_DIR(src/ui UI_SRCS *.h *.cc)
|
|
COLMAP_ADD_SOURCE_DIR(src/util UTIL_SRCS *.h *.cc)
|
|
|
|
# Add all of the source files to a regular library target, as using a custom
|
|
# target does not allow us to set its C++ include directories (and thus
|
|
# intellisense can't find any of the included files).
|
|
add_library(
|
|
${COLMAP_SRC_ROOT_FOLDER}
|
|
${LIB_FLANN_SRCS}
|
|
${LIB_LSD_SRCS}
|
|
${LIB_PBA_SRCS}
|
|
${LIB_POISSON_RECON_SRCS}
|
|
${LIB_SIFT_GPU_SRCS}
|
|
${LIB_SQLITE_SRCS}
|
|
${LIB_VLFEAT_SRCS}
|
|
${BASE_SRCS}
|
|
${CONTROLLERS_SRCS}
|
|
${ESTIMATORS_SRCS}
|
|
${EXE_SRCS}
|
|
${FEATURE_SRCS}
|
|
${MVS_SRCS}
|
|
${OPTIM_SRCS}
|
|
${RETRIEVAL_SRCS}
|
|
${SFM_SRCS}
|
|
${TOOLS_SRCS}
|
|
${UI_SRCS}
|
|
${UTIL_SRCS}
|
|
)
|
|
|
|
# Prevent the library from being compiled automatically.
|
|
set_target_properties(
|
|
${COLMAP_SRC_ROOT_FOLDER} PROPERTIES
|
|
EXCLUDE_FROM_ALL 1
|
|
EXCLUDE_FROM_DEFAULT_BUILD 1)
|
|
|
|
|
|
################################################################################
|
|
# Install and uninstall scripts
|
|
################################################################################
|
|
|
|
# Install header files.
|
|
install(DIRECTORY src/
|
|
DESTINATION include/colmap
|
|
FILES_MATCHING PATTERN "*.h")
|
|
install(DIRECTORY lib/
|
|
DESTINATION include/colmap/lib
|
|
FILES_MATCHING REGEX ".*[.]h|.*[.]hpp|.*[.]inl")
|
|
|
|
# Generate and install CMake configuration.
|
|
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/CMakeConfig.cmake.in"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/COLMAPConfig.cmake" @ONLY)
|
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/COLMAPConfig.cmake"
|
|
DESTINATION "share/colmap")
|
|
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/CMakeConfigVersion.cmake.in"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/COLMAPConfigVersion.cmake" @ONLY)
|
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/COLMAPConfigVersion.cmake"
|
|
DESTINATION "share/colmap")
|
|
|
|
# Install find_package scripts for dependencies.
|
|
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cmake
|
|
DESTINATION share/colmap
|
|
FILES_MATCHING PATTERN "Find*.cmake")
|
|
|
|
# Install batch scripts under Windows.
|
|
if(IS_MSVC)
|
|
install(FILES "scripts/shell/COLMAP.bat" "scripts/shell/RUN_TESTS.bat"
|
|
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
|
|
GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
|
|
DESTINATION "/")
|
|
endif()
|
|
|
|
# Install application meny entry under Linux/Unix.
|
|
if(UNIX AND NOT APPLE)
|
|
install(FILES "doc/COLMAP.desktop" DESTINATION "share/applications")
|
|
endif()
|
|
|
|
# Configure the uninstallation script.
|
|
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/CMakeUninstall.cmake.in"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/CMakeUninstall.cmake"
|
|
IMMEDIATE @ONLY)
|
|
add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/CMakeUninstall.cmake)
|
|
set_target_properties(uninstall PROPERTIES FOLDER ${CMAKE_TARGETS_ROOT_FOLDER})
|