parent
7aa05f5ce7
commit
d27fccb3ea
50
utils.cmake
50
utils.cmake
|
@ -23,63 +23,65 @@
|
|||
]]
|
||||
|
||||
function(setup_project)
|
||||
cmake_parse_arguments(PROJ_ARGS "QT" "QML_IMPORT_DIR" "LANGUAGES" ${ARGN})
|
||||
cmake_parse_arguments(PROJ_ARGS "QT_PROJECT" "QML_IMPORT_DIR" "LANGUAGES" ${ARGN})
|
||||
if(NOT PROJ_ARGS_LANGUAGES)
|
||||
message(AUTHOR_WARNING "setup_project: You need to specify at least one language for this function!")
|
||||
return()
|
||||
endif()
|
||||
if(NOT DEFINED CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE Release)
|
||||
set(CMAKE_BUILD_TYPE Release PARENT_SCOPE)
|
||||
endif()
|
||||
if(NOT DEFINED CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE)
|
||||
# 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.
|
||||
if(NOT MINGW AND BUILD_SHARED_LIBS)
|
||||
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE ON)
|
||||
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE ON PARENT_SCOPE)
|
||||
endif()
|
||||
endif()
|
||||
if(NOT DEFINED CMAKE_DEBUG_POSTFIX)
|
||||
if(WIN32)
|
||||
set(CMAKE_DEBUG_POSTFIX d)
|
||||
set(CMAKE_DEBUG_POSTFIX d PARENT_SCOPE)
|
||||
else()
|
||||
set(CMAKE_DEBUG_POSTFIX _debug)
|
||||
set(CMAKE_DEBUG_POSTFIX _debug PARENT_SCOPE)
|
||||
endif()
|
||||
endif()
|
||||
if(NOT DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY)
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin" PARENT_SCOPE)
|
||||
endif()
|
||||
if(NOT DEFINED CMAKE_LIBRARY_OUTPUT_DIRECTORY)
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib" PARENT_SCOPE)
|
||||
endif()
|
||||
if(NOT DEFINED CMAKE_ARCHIVE_OUTPUT_DIRECTORY)
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib" PARENT_SCOPE)
|
||||
endif()
|
||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||
set(CMAKE_INCLUDE_CURRENT_DIR ON PARENT_SCOPE)
|
||||
foreach(__lang ${PROJ_ARGS_LANGUAGES})
|
||||
if(__lang STREQUAL "C")
|
||||
enable_language(C)
|
||||
if(NOT DEFINED CMAKE_C_STANDARD)
|
||||
set(CMAKE_C_STANDARD 11)
|
||||
set(CMAKE_C_STANDARD 11 PARENT_SCOPE)
|
||||
endif()
|
||||
set(CMAKE_C_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_C_EXTENSIONS OFF)
|
||||
set(CMAKE_C_VISIBILITY_PRESET hidden)
|
||||
set(CMAKE_C_STANDARD_REQUIRED ON PARENT_SCOPE)
|
||||
set(CMAKE_C_EXTENSIONS OFF PARENT_SCOPE)
|
||||
set(CMAKE_C_VISIBILITY_PRESET hidden PARENT_SCOPE)
|
||||
elseif(__lang STREQUAL "CXX")
|
||||
enable_language(CXX)
|
||||
if(NOT DEFINED CMAKE_CXX_STANDARD)
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
set(CMAKE_CXX_STANDARD 20 PARENT_SCOPE)
|
||||
endif()
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON PARENT_SCOPE)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF PARENT_SCOPE)
|
||||
set(CMAKE_CXX_VISIBILITY_PRESET hidden PARENT_SCOPE)
|
||||
if(MSVC)
|
||||
string(REGEX REPLACE "[-|/]GR-? " " " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
||||
string(REGEX REPLACE "[-|/]EHs-?c-? " " " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
||||
string(REGEX REPLACE "[-|/]W[0|1|2|3|4|all] " " " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
||||
string(APPEND CMAKE_CXX_FLAGS " /GR /EHsc /W4 ")
|
||||
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} PARENT_SCOPE)
|
||||
if(MSVC_VERSION GREATER_EQUAL 1920) # Visual Studio 2019 version 16.0
|
||||
string(REGEX REPLACE "[-|/]Ob[0|1|2|3] " " " CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE})
|
||||
string(APPEND CMAKE_CXX_FLAGS_RELEASE " /Ob3 ")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE} PARENT_SCOPE)
|
||||
endif()
|
||||
endif()
|
||||
elseif(__lang STREQUAL "RC")
|
||||
|
@ -87,16 +89,16 @@ function(setup_project)
|
|||
enable_language(RC)
|
||||
endif()
|
||||
if(MSVC)
|
||||
set(CMAKE_RC_FLAGS "/c65001 /DWIN32 /nologo")
|
||||
set(CMAKE_RC_FLAGS "/c65001 /DWIN32 /nologo" PARENT_SCOPE)
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
|
||||
if(PROJ_ARGS_QT)
|
||||
set(CMAKE_AUTOUIC ON)
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
set(CMAKE_AUTORCC ON)
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON PARENT_SCOPE)
|
||||
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON PARENT_SCOPE)
|
||||
if(PROJ_ARGS_QT_PROJECT)
|
||||
set(CMAKE_AUTOUIC ON PARENT_SCOPE)
|
||||
set(CMAKE_AUTOMOC ON PARENT_SCOPE)
|
||||
set(CMAKE_AUTORCC ON PARENT_SCOPE)
|
||||
endif()
|
||||
if(PROJ_ARGS_QML_IMPORT_DIR)
|
||||
list(APPEND QML_IMPORT_PATH "${PROJ_ARGS_QML_IMPORT_DIR}")
|
||||
|
|
Loading…
Reference in New Issue