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