Signed-off-by: Yuhang Zhao <2546789017@qq.com>
This commit is contained in:
Yuhang Zhao 2023-01-27 15:03:00 +08:00
parent 7aa05f5ce7
commit d27fccb3ea
1 changed files with 26 additions and 24 deletions

View File

@ -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}")