diff --git a/utils.cmake b/utils.cmake index 356d9c8..59d0617 100644 --- a/utils.cmake +++ b/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}")