diff --git a/utils.cmake b/utils.cmake index d42646c..d5e20af 100644 --- a/utils.cmake +++ b/utils.cmake @@ -40,7 +40,7 @@ function(setup_project) cmake_policy(SET CMP0141 NEW) endif() # Introduced by CMP0141. - if(MSVC AND NOT DEFINED CMAKE_MSVC_DEBUG_INFORMATION_FORMAT) + if(NOT DEFINED CMAKE_MSVC_DEBUG_INFORMATION_FORMAT) set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<$:ProgramDatabase>" PARENT_SCOPE) endif() # Improve language standard and extension selection. @@ -76,16 +76,16 @@ function(setup_project) cmake_policy(SET CMP0091 NEW) endif() # Introduced by CMP0091. - if(MSVC AND NOT DEFINED CMAKE_MSVC_RUNTIME_LIBRARY) + if(NOT DEFINED CMAKE_MSVC_RUNTIME_LIBRARY) set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL" PARENT_SCOPE) endif() # Add correct link flags for PIE (Position Independent Executable). if(POLICY CMP0083) cmake_policy(SET CMP0083 NEW) endif() - #if(NOT DEFINED CMAKE_BUILD_TYPE) - # set(CMAKE_BUILD_TYPE "Release" PARENT_SCOPE) - #endif() + if(NOT DEFINED CMAKE_BUILD_TYPE AND NOT DEFINED CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Release" PARENT_SCOPE) + endif() if(PROJ_ARGS_ENABLE_LTO) # MinGW has many bugs when LTO is enabled, and they are all very # hard to workaround, so just don't enable LTO at all for MinGW. @@ -105,14 +105,15 @@ function(setup_project) endif() endif() endif() + include(GNUInstallDirs) if(NOT DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin" PARENT_SCOPE) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}" PARENT_SCOPE) endif() if(NOT DEFINED CMAKE_LIBRARY_OUTPUT_DIRECTORY) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib" PARENT_SCOPE) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}" PARENT_SCOPE) endif() if(NOT DEFINED CMAKE_ARCHIVE_OUTPUT_DIRECTORY) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib" PARENT_SCOPE) + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}" PARENT_SCOPE) endif() set(CMAKE_INCLUDE_CURRENT_DIR ON PARENT_SCOPE) set(CMAKE_LINK_DEPENDS_NO_SHARED ON PARENT_SCOPE) @@ -120,6 +121,12 @@ function(setup_project) include(CheckPIESupported) check_pie_supported() # This function must be called to ensure CMake adds -fPIE to the linker flags. set(CMAKE_VISIBILITY_INLINES_HIDDEN ON PARENT_SCOPE) + set(CMAKE_INSTALL_RPATH_USE_LINK_PATH ON PARENT_SCOPE) + if(APPLE) + set(CMAKE_MACOSX_RPATH ON PARENT_SCOPE) + else() + set(CMAKE_INSTALL_RPATH "$ORIGIN/../${CMAKE_INSTALL_LIBDIR}" PARENT_SCOPE) + endif() if(PROJ_ARGS_QT_PROJECT) set(CMAKE_AUTOUIC ON PARENT_SCOPE) set(CMAKE_AUTOMOC ON PARENT_SCOPE)