Compare commits

...

7 Commits

10 changed files with 51 additions and 38 deletions

View File

@ -1,3 +1,5 @@
#!/usr/bin/env python3
# ---------------------------------- # ----------------------------------
# Options affecting listfile parsing # Options affecting listfile parsing
# ---------------------------------- # ----------------------------------
@ -5,15 +7,21 @@ with section("parse"):
# Specify structure for custom cmake functions # Specify structure for custom cmake functions
additional_commands = { additional_commands = {
'add_doxygen': { 'flags' : [],
'kwargs': { 'LATEX': 1,
'HTML': 1,
'COMMENT': 1}},
'add_breathe': { 'flags' : [],
'kwargs': { 'COMMENT': 1}},
'add_common_library': { 'flags' : [], 'add_common_library': { 'flags' : [],
'kwargs': { 'OUTPUT_NAME': '*', 'kwargs': { 'OUTPUT_NAME': 1,
'SOURCES': '*', 'SOURCES': '*',
'TARGET': '1'}}, 'TARGET': 1}},
'qt5_translation': { 'flags' : [], 'qt5_translation': { 'flags' : [],
'kwargs': { 'TS_DIR': '1', 'kwargs': { 'OUTPUT_DIR': 1,
'LANGUAGES': '*', 'LANGUAGES': '*',
'SOURCES': '*', 'SOURCES': '*',
'TARGET': '1'}}, 'BASE_NAME': 1}},
'pvs_studio_add_target': { 'flags' : [ 'COMPILE_COMMANDS', 'pvs_studio_add_target': { 'flags' : [ 'COMPILE_COMMANDS',
'OUTPUT', 'OUTPUT',
'HIDE_HELP'], 'HIDE_HELP'],
@ -22,7 +30,7 @@ with section("parse"):
'DEPENDS': '*', 'DEPENDS': '*',
'FORMAT': '*', 'FORMAT': '*',
'MODE': '*', 'MODE': '*',
'TARGET': '*'}}, 'TARGET': 1}},
'write_compiler_detection_header': { 'flags' : [], 'write_compiler_detection_header': { 'flags' : [],
'kwargs': { 'COMPILERS': '*', 'kwargs': { 'COMPILERS': '*',
'FEATURES': '*', 'FEATURES': '*',
@ -48,11 +56,11 @@ with section("format"):
# If an argument group contains more than this many sub-groups (parg or kwarg # If an argument group contains more than this many sub-groups (parg or kwarg
# groups) then force it to a vertical layout. # groups) then force it to a vertical layout.
max_subgroups_hwrap = 2 max_subgroups_hwrap = 3
# If a positional argument group contains more than this many arguments, then # If a positional argument group contains more than this many arguments, then
# force it to a vertical layout. # force it to a vertical layout.
max_pargs_hwrap = 6 max_pargs_hwrap = 5
# If a cmdline positional group consumes more than this many lines without # If a cmdline positional group consumes more than this many lines without
# nesting, then invalidate the layout (and nest) # nesting, then invalidate the layout (and nest)

View File

@ -24,37 +24,34 @@ endif()
if(CMAKE_BUILD_TYPE STREQUAL Profile) if(CMAKE_BUILD_TYPE STREQUAL Profile)
# Ключи компиляции для режима профилирования в зависимости от типа компилятора # Ключи компиляции для режима профилирования в зависимости от типа компилятора
if(CMAKE_CXX_COMPILER_IS_Clang OR CMAKE_CXX_COMPILER_IS_GCC) if(CMAKE_CXX_COMPILER_IS_Clang OR CMAKE_CXX_COMPILER_IS_GCC)
set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE} -ggdb -pg" CACHE STRING "") set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE} -ggdb -pg -fno-omit-frame-pointer" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE} -ggdb -pg" CACHE STRING "") set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE} -ggdb -pg -fno-omit-frame-pointer" CACHE STRING "" FORCE)
set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -pg" CACHE STRING "") set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -pg" CACHE STRING "" FORCE)
set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -pg" CACHE STRING "") set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -pg" CACHE STRING "" FORCE)
set(CMAKE_STATIC_LINKER_FLAGS_PROFILE "${CMAKE_STATIC_LINKER_FLAGS_RELEASE} -pg" CACHE STRING "") set(CMAKE_STATIC_LINKER_FLAGS_PROFILE "${CMAKE_STATIC_LINKER_FLAGS_RELEASE} -pg" CACHE STRING "" FORCE)
set(CMAKE_MODULE_LINKER_FLAGS_PROFILE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} -pg" CACHE STRING "") set(CMAKE_MODULE_LINKER_FLAGS_PROFILE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} -pg" CACHE STRING "" FORCE)
elseif(CMAKE_CXX_COMPILER_IS_Intel) elseif(CMAKE_CXX_COMPILER_IS_Intel)
message("Set options for profiling with Intel C++") message("Set options for profiling with Intel C++")
elseif(CMAKE_CXX_COMPILER_IS_MSVC) elseif(CMAKE_CXX_COMPILER_IS_MSVC)
message("Set options for profiling with Visual Studio C++") message("Set options for profiling with Visual Studio C++")
endif() endif()
set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "Enable generation of verbose build scripts." FORCE)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE BOOL "Enable generation of compile_commands.json." FORCE)
set(PROFILE 1) set(PROFILE 1)
elseif(CMAKE_BUILD_TYPE STREQUAL Debug) elseif(CMAKE_BUILD_TYPE STREQUAL Debug)
# В режиме отладки подробный вывод сообщений компилятора # В режиме отладки подробный вывод сообщений компилятора
if(CMAKE_CXX_COMPILER_IS_Clang OR CMAKE_CXX_COMPILER_IS_GCC) if(CMAKE_CXX_COMPILER_IS_Clang OR CMAKE_CXX_COMPILER_IS_GCC)
string(APPEND CMAKE_C_FLAGS_DEBUG " -ggdb") set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -ggdb -fno-omit-frame-pointer" CACHE STRING "" FORCE)
string(APPEND CMAKE_CXX_FLAGS_DEBUG " -ggdb") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -ggdb -fno-omit-frame-pointer" CACHE STRING "" FORCE)
endif() endif()
set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "Enable verbose build file generation." FORCE) set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "Enable generation of verbose build scripts." FORCE)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE BOOL "Enable output of compile commands during generation." set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE BOOL "Enable generation of compile_commands.json." FORCE)
FORCE)
set(DEBUG 1) set(DEBUG 1)
elseif(CMAKE_BUILD_TYPE STREQUAL Release) elseif(CMAKE_BUILD_TYPE STREQUAL Release)
set(RELEASE 1) set(RELEASE 1)
elseif(CMAKE_BUILD_TYPE STREQUAL None) elseif(CMAKE_BUILD_TYPE STREQUAL None)
# Режим None используется для статического анализа кода # Режим None используется для статического анализа кода
set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "Enable generation of verbose build scripts." FORCE)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE BOOL "Enable generation of compile_commands.json." FORCE)
set(ANALYSIS 1) set(ANALYSIS 1)
set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "Enable verbose build file generation." FORCE)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE BOOL "Enable output of compile commands during generation."
FORCE)
# set(USE_CLANG_TIDY ON CACHE BOOL "Use clang-tidy")
# set(USE_CPPCHECK ON CACHE BOOL "Use cppcheck")
set(USE_PVS_STUDIO ON CACHE BOOL "Use PVS-Studio")
endif() endif()

View File

@ -45,5 +45,6 @@ include(CMLibQtTranslation)
include(CMLibToday) include(CMLibToday)
include(CMLibAuxilarySymlinks) include(CMLibAuxilarySymlinks)
include(CMLibConfigHPPGenerate) include(CMLibConfigHPPGenerate)
include(CMLibNinjaGeneratorHelper)
include(CMLibCPack) include(CMLibCPack)
include(CMLibUninstall) include(CMLibUninstall)

View File

@ -11,7 +11,7 @@ function(common_target_properties target)
get_target_property(__sources ${target} SOURCES) get_target_property(__sources ${target} SOURCES)
foreach(__src IN LISTS __sources) foreach(__src IN LISTS __sources)
string(REGEX MATCH ".*/qrc_.*\\.cpp$" __qrc ${__src}) string(REGEX MATCH ".*/qrc_.*\\.cpp$" __qrc ${__src})
if (__qrc) if(__qrc)
set_property(SOURCE ${__qrc} PROPERTY COTIRE_EXCLUDED ON) set_property(SOURCE ${__qrc} PROPERTY COTIRE_EXCLUDED ON)
endif() endif()
endforeach() endforeach()

View File

@ -54,8 +54,8 @@ function(add_breathe target)
configure_file(${INDEX_MD_FILE} ${WORK_DIR}/index.md @ONLY) configure_file(${INDEX_MD_FILE} ${WORK_DIR}/index.md @ONLY)
file(GLOB MD_FILES ${CMAKE_SOURCE_DIR}/doc/breathe/*.md) file(GLOB MD_FILES ${CMAKE_SOURCE_DIR}/doc/breathe/*.md)
if(MD_FILES) if(MD_FILES)
add_custom_command(TARGET ${target} PRE_BUILD add_custom_command(TARGET ${target} PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${MD_FILES} ${WORK_DIR}) ${MD_FILES} ${WORK_DIR})
endif() endif()
endif() endif()
@ -64,13 +64,12 @@ function(add_breathe target)
configure_file(${INDEX_RST_FILE} ${WORK_DIR}/index.rst @ONLY) configure_file(${INDEX_RST_FILE} ${WORK_DIR}/index.rst @ONLY)
file(GLOB RST_FILES ${CMAKE_SOURCE_DIR}/doc/breathe/*.rst) file(GLOB RST_FILES ${CMAKE_SOURCE_DIR}/doc/breathe/*.rst)
if(RST_FILES) if(RST_FILES)
add_custom_command(TARGET ${target} PRE_BUILD add_custom_command(TARGET ${target} PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${RST_FILES} ${WORK_DIR}) ${RST_FILES} ${WORK_DIR})
endif() endif()
endif() endif()
else() else()
message(STATUS "CMLIB warning:") message(STATUS "CMLIB warning:")
add_custom_target(${target} VERBATIM add_custom_target(${target} VERBATIM COMMENT " Breathe is not found. Skipping target ${target} build")
COMMENT " Breathe is not found. Skipping target ${target} build")
endif() endif()
endfunction() endfunction()

View File

@ -37,7 +37,6 @@ function(add_doxygen target)
COMMENT "Generating API documentation with Doxygen") COMMENT "Generating API documentation with Doxygen")
else() else()
message(STATUS "CMLIB warning:") message(STATUS "CMLIB warning:")
add_custom_target(${target} VERBATIM add_custom_target(${target} VERBATIM COMMENT " Doxygen is not found. Skipping target ${target} build")
COMMENT " Doxygen is not found. Skipping target ${target} build")
endif() endif()
endfunction() endfunction()

View File

@ -0,0 +1,9 @@
# Если выбран генератор Ninja, то в основном сборочном каталоге
# создаётся файл Makefile, который обрабатывается командой make и
# передаёт исполнение системе сборки ninja.
# Таким образом можно выполнять команду make, даже если правила
# сборки проекта сгенерированы для ninja.
if("${CMAKE_GENERATOR}" MATCHES "Ninja")
file(WRITE ${CMAKE_BINARY_DIR}/Makefile ".PHONY: build\n%:\n\t@ninja \$@\nbuild:\n\t@ninja\n")
endif()

View File

@ -18,7 +18,7 @@ function(qt5_translation outfiles)
set(_ts "${_base_name}_${_lang}.ts") set(_ts "${_base_name}_${_lang}.ts")
set(_qm "${_base_name}_${_lang}.qm") set(_qm "${_base_name}_${_lang}.qm")
list(APPEND _ts_list ${_output_dir}/${_ts}) list(APPEND _ts_list ${_output_dir}/${_ts})
list(APPEND _l10n_names "${_base_name}_l10n_${_lang}") list(APPEND _l10n_names_list "${_base_name}_l10n_${_lang}")
string(APPEND L10N_QRC_BODY "<file alias=\"${_qm}\">${CMAKE_BINARY_DIR}/${_qm}</file>\n") string(APPEND L10N_QRC_BODY "<file alias=\"${_qm}\">${CMAKE_BINARY_DIR}/${_qm}</file>\n")
add_custom_target( add_custom_target(
@ -39,7 +39,7 @@ function(qt5_translation outfiles)
configure_file(${CMLIB_MODULE_DIR}/qrc/l10n.qrc.in ${CMAKE_BINARY_DIR}/${_base_name}_l10n.qrc) configure_file(${CMLIB_MODULE_DIR}/qrc/l10n.qrc.in ${CMAKE_BINARY_DIR}/${_base_name}_l10n.qrc)
qt5_add_resources(${outfiles} ${CMAKE_BINARY_DIR}/${_base_name}_l10n.qrc) qt5_add_resources(${outfiles} ${CMAKE_BINARY_DIR}/${_base_name}_l10n.qrc)
add_custom_target(${_base_name}_qrc DEPENDS ${_qrc}) add_custom_target(${_base_name}_qrc DEPENDS ${_qrc})
add_custom_target(${_base_name}_l10n DEPENDS ${_l10n_targets}) add_custom_target(${_base_name}_l10n DEPENDS ${_l10n_names_list})
if(NOT TARGET l10n) if(NOT TARGET l10n)
add_custom_target(l10n) add_custom_target(l10n)
endif() endif()