## ========================================================================= ## @author Leonardo Florez Valencia ## @email florez-l@javeriana.edu.co ## ========================================================================= cmake_minimum_required(VERSION 3.0) ## ======================== ## == Project definition == ## ======================== set(prj_MAJ_VER 0) set(prj_MIN_VER 1) set(prj_REL_VER 0) set(prj_VER "${prj_MAJ_VER}.${prj_MIN_VER}.${prj_REL_VER}") set(prj_SHORT_VER "${prj_MAJ_VER}") project(fpa VERSION ${prj_VER}) ## ========================== ## == Some useful policies == ## ========================== set(_policies CMP0015 CMP0020 CMP0042 CMP0053) foreach(_p ${_policies}) if(POLICY ${_p}) cmake_policy(SET ${_p} NEW) endif(POLICY ${_p}) endforeach(_p) ## ========================================================= ## == If working on a MacOSX, activate the use of RPATH's == ## == Furthermore: prepare the type of executables == ## ========================================================= set(EXECUTABLE_TYPE "" CACHE STRING "Executable linking." FORCE) if(APPLE) set(EXECUTABLE_TYPE "MACOSX_BUNDLE" CACHE STRING "Executable linking." FORCE) set(CMAKE_MACOSX_RPATH true CACHE BOOL "Use RPATH's on MacOSX." FORCE) mark_as_advanced(CMAKE_MACOSX_RPATH) elseif(WIN32) set(EXECUTABLE_TYPE "WIN32" CACHE STRING "Executable linking." FORCE) endif(APPLE) mark_as_advanced(EXECUTABLE_TYPE) ## ======================================================================= ## == Force c++11 language version == ## == NOTE: It seems that by default on Visual Studio Compiler supports == ## == c++11, so it only need to be tested on other OS. == ## ======================================================================= if(NOT MSVC) include(CheckCXXCompilerFlag) check_cxx_compiler_flag("-std=c++11" COMPILER_SUPPORTS_CXX11) if(COMPILER_SUPPORTS_CXX11) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") else(COMPILER_SUPPORTS_CXX11) check_cxx_compiler_flag("-std=c++0x" COMPILER_SUPPORTS_CXX0X) if(COMPILER_SUPPORTS_CXX0X) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") else(COMPILER_SUPPORTS_CXX0X) message( FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support." ) endif(COMPILER_SUPPORTS_CXX0X) endif(COMPILER_SUPPORTS_CXX11) endif(NOT MSVC) ## =================================================== ## == Prepare header generator to build shared libs == ## =================================================== include(GenerateExportHeader) ## ================================================== ## == Do not allow to build inside the source tree == ## ================================================== if(PROJECT_BINARY_DIR STREQUAL ${PROJECT_SOURCE_DIR}) message(FATAL_ERROR "Building in the source tree is not allowed.") endif(PROJECT_BINARY_DIR STREQUAL ${PROJECT_SOURCE_DIR}) ## ================================================= ## == Where to put targets (executables and libs) == ## ================================================= set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}) set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}) mark_as_advanced( CMAKE_BACKWARDS_COMPATIBILITY EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH ) ## =========================================== ## == Find needed packages and dependencies == ## =========================================== find_package(ITK CONFIG REQUIRED) include(${ITK_USE_FILE}) if(ITKVtkGlue_LOADED) find_package(VTK CONFIG REQUIRED) include(${VTK_USE_FILE}) endif(ITKVtkGlue_LOADED) ## ========================= ## == Installation values == ## ========================= set(config_install_dir "lib/cmake/${PROJECT_NAME}") set(include_install_dir "include") set(generated_dir "${CMAKE_CURRENT_BINARY_DIR}/generated") set(version_config "${generated_dir}/${PROJECT_NAME}ConfigVersion.cmake") set(project_config "${generated_dir}/${PROJECT_NAME}Config.cmake") set(targets_export_name "${PROJECT_NAME}Targets") set(namespace "${PROJECT_NAME}::") ## =========================== ## == Build different parts == ## =========================== subdirs(appli lib tests) ## =============================== ## == Global installation rules == ## =============================== include(CMakePackageConfigHelpers) write_basic_package_version_file( "${version_config}" COMPATIBILITY SameMajorVersion ) configure_package_config_file( "cmake/${PROJECT_NAME}Config.cmake.in" "${project_config}" INSTALL_DESTINATION "${config_install_dir}" ) install( EXPORT "${targets_export_name}" NAMESPACE "${namespace}" DESTINATION "${config_install_dir}" ) install( FILES "${project_config}" DESTINATION "${config_install_dir}" ) ## eof - $RCSfile$