parent
7aa05f5ce7
commit
d27fccb3ea
50
utils.cmake
50
utils.cmake
|
@ -23,63 +23,65 @@
|
||||||
]]
|
]]
|
||||||
|
|
||||||
function(setup_project)
|
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)
|
if(NOT PROJ_ARGS_LANGUAGES)
|
||||||
message(AUTHOR_WARNING "setup_project: You need to specify at least one language for this function!")
|
message(AUTHOR_WARNING "setup_project: You need to specify at least one language for this function!")
|
||||||
return()
|
return()
|
||||||
endif()
|
endif()
|
||||||
if(NOT DEFINED CMAKE_BUILD_TYPE)
|
if(NOT DEFINED CMAKE_BUILD_TYPE)
|
||||||
set(CMAKE_BUILD_TYPE Release)
|
set(CMAKE_BUILD_TYPE Release PARENT_SCOPE)
|
||||||
endif()
|
endif()
|
||||||
if(NOT DEFINED CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE)
|
if(NOT DEFINED CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE)
|
||||||
# MinGW has many bugs when LTO is enabled, and they are all very
|
# 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.
|
# hard to workaround, so just don't enable LTO at all for MinGW.
|
||||||
if(NOT MINGW AND BUILD_SHARED_LIBS)
|
if(NOT MINGW AND BUILD_SHARED_LIBS)
|
||||||
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE ON)
|
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE ON PARENT_SCOPE)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
if(NOT DEFINED CMAKE_DEBUG_POSTFIX)
|
if(NOT DEFINED CMAKE_DEBUG_POSTFIX)
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
set(CMAKE_DEBUG_POSTFIX d)
|
set(CMAKE_DEBUG_POSTFIX d PARENT_SCOPE)
|
||||||
else()
|
else()
|
||||||
set(CMAKE_DEBUG_POSTFIX _debug)
|
set(CMAKE_DEBUG_POSTFIX _debug PARENT_SCOPE)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
if(NOT DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY)
|
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()
|
endif()
|
||||||
if(NOT DEFINED CMAKE_LIBRARY_OUTPUT_DIRECTORY)
|
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()
|
endif()
|
||||||
if(NOT DEFINED CMAKE_ARCHIVE_OUTPUT_DIRECTORY)
|
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()
|
endif()
|
||||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
set(CMAKE_INCLUDE_CURRENT_DIR ON PARENT_SCOPE)
|
||||||
foreach(__lang ${PROJ_ARGS_LANGUAGES})
|
foreach(__lang ${PROJ_ARGS_LANGUAGES})
|
||||||
if(__lang STREQUAL "C")
|
if(__lang STREQUAL "C")
|
||||||
enable_language(C)
|
enable_language(C)
|
||||||
if(NOT DEFINED CMAKE_C_STANDARD)
|
if(NOT DEFINED CMAKE_C_STANDARD)
|
||||||
set(CMAKE_C_STANDARD 11)
|
set(CMAKE_C_STANDARD 11 PARENT_SCOPE)
|
||||||
endif()
|
endif()
|
||||||
set(CMAKE_C_STANDARD_REQUIRED ON)
|
set(CMAKE_C_STANDARD_REQUIRED ON PARENT_SCOPE)
|
||||||
set(CMAKE_C_EXTENSIONS OFF)
|
set(CMAKE_C_EXTENSIONS OFF PARENT_SCOPE)
|
||||||
set(CMAKE_C_VISIBILITY_PRESET hidden)
|
set(CMAKE_C_VISIBILITY_PRESET hidden PARENT_SCOPE)
|
||||||
elseif(__lang STREQUAL "CXX")
|
elseif(__lang STREQUAL "CXX")
|
||||||
enable_language(CXX)
|
enable_language(CXX)
|
||||||
if(NOT DEFINED CMAKE_CXX_STANDARD)
|
if(NOT DEFINED CMAKE_CXX_STANDARD)
|
||||||
set(CMAKE_CXX_STANDARD 20)
|
set(CMAKE_CXX_STANDARD 20 PARENT_SCOPE)
|
||||||
endif()
|
endif()
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON PARENT_SCOPE)
|
||||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
set(CMAKE_CXX_EXTENSIONS OFF PARENT_SCOPE)
|
||||||
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
|
set(CMAKE_CXX_VISIBILITY_PRESET hidden PARENT_SCOPE)
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
string(REGEX REPLACE "[-|/]GR-? " " " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
string(REGEX REPLACE "[-|/]GR-? " " " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
||||||
string(REGEX REPLACE "[-|/]EHs-?c-? " " " 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(REGEX REPLACE "[-|/]W[0|1|2|3|4|all] " " " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
||||||
string(APPEND CMAKE_CXX_FLAGS " /GR /EHsc /W4 ")
|
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
|
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(REGEX REPLACE "[-|/]Ob[0|1|2|3] " " " CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE})
|
||||||
string(APPEND CMAKE_CXX_FLAGS_RELEASE " /Ob3 ")
|
string(APPEND CMAKE_CXX_FLAGS_RELEASE " /Ob3 ")
|
||||||
|
set(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE} PARENT_SCOPE)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
elseif(__lang STREQUAL "RC")
|
elseif(__lang STREQUAL "RC")
|
||||||
|
@ -87,16 +89,16 @@ function(setup_project)
|
||||||
enable_language(RC)
|
enable_language(RC)
|
||||||
endif()
|
endif()
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
set(CMAKE_RC_FLAGS "/c65001 /DWIN32 /nologo")
|
set(CMAKE_RC_FLAGS "/c65001 /DWIN32 /nologo" PARENT_SCOPE)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON PARENT_SCOPE)
|
||||||
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
|
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON PARENT_SCOPE)
|
||||||
if(PROJ_ARGS_QT)
|
if(PROJ_ARGS_QT_PROJECT)
|
||||||
set(CMAKE_AUTOUIC ON)
|
set(CMAKE_AUTOUIC ON PARENT_SCOPE)
|
||||||
set(CMAKE_AUTOMOC ON)
|
set(CMAKE_AUTOMOC ON PARENT_SCOPE)
|
||||||
set(CMAKE_AUTORCC ON)
|
set(CMAKE_AUTORCC ON PARENT_SCOPE)
|
||||||
endif()
|
endif()
|
||||||
if(PROJ_ARGS_QML_IMPORT_DIR)
|
if(PROJ_ARGS_QML_IMPORT_DIR)
|
||||||
list(APPEND QML_IMPORT_PATH "${PROJ_ARGS_QML_IMPORT_DIR}")
|
list(APPEND QML_IMPORT_PATH "${PROJ_ARGS_QML_IMPORT_DIR}")
|
||||||
|
|
Loading…
Reference in New Issue