Compare commits
No commits in common. "c92c8540356bd1ffc017a311938bbedb2c1feedc" and "88dc3c0d1177281967446879f839e372d121f41d" have entirely different histories.
c92c854035
...
88dc3c0d11
3
.gitignore
vendored
3
.gitignore
vendored
@ -7,9 +7,6 @@ build
|
|||||||
# Каталог для тестирования установки
|
# Каталог для тестирования установки
|
||||||
_output
|
_output
|
||||||
|
|
||||||
# Каталог для скачивания необходимых файлов
|
|
||||||
_downloads
|
|
||||||
|
|
||||||
# Файлы настроек, редактируемые во время отладки,
|
# Файлы настроек, редактируемые во время отладки,
|
||||||
# за исключением шаблонных файлов
|
# за исключением шаблонных файлов
|
||||||
files/etc/*.conf
|
files/etc/*.conf
|
||||||
|
@ -13,8 +13,14 @@ set(${PROJECT_NAME}_AUTHOR_EMAIL "dev@246060.ru")
|
|||||||
|
|
||||||
# Рекомендуемый способ подключения MyxCMake
|
# Рекомендуемый способ подключения MyxCMake
|
||||||
include(cmake/myx_setup.cmake)
|
include(cmake/myx_setup.cmake)
|
||||||
# Правила загрузки требуемых файлов
|
|
||||||
include(myx_download_content.cmake)
|
# Используемые библиотеки
|
||||||
|
if(PROJECT_IS_TOP_LEVEL)
|
||||||
|
myx_add_external_target(myx-example-interface-library
|
||||||
|
GIT_REPOSITORY git@gitlab.2:myx/examples/myx-example-interface-library)
|
||||||
|
myx_add_external_target(myx-example-object-library
|
||||||
|
GIT_REPOSITORY git@gitlab.2:myx/examples/myx-example-object-library)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Цель для создания исполняемого файла
|
# Цель для создания исполняемого файла
|
||||||
myx_add_executable(${PROJECT_NAME})
|
myx_add_executable(${PROJECT_NAME})
|
||||||
|
@ -50,7 +50,8 @@ include(${MYX_CMAKE_LIB_DIR}/NinjaGeneratorWarning.cmake)
|
|||||||
include(${MYX_CMAKE_LIB_DIR}/DirectoriesGuards.cmake)
|
include(${MYX_CMAKE_LIB_DIR}/DirectoriesGuards.cmake)
|
||||||
include(${MYX_CMAKE_LIB_DIR}/SemanticProjectVersion.cmake)
|
include(${MYX_CMAKE_LIB_DIR}/SemanticProjectVersion.cmake)
|
||||||
include(${MYX_CMAKE_LIB_DIR}/NinjaGeneratorWrapper.cmake)
|
include(${MYX_CMAKE_LIB_DIR}/NinjaGeneratorWrapper.cmake)
|
||||||
include(${MYX_CMAKE_LIB_DIR}/DownloadContent.cmake)
|
include(${MYX_CMAKE_LIB_DIR}/AddExternalTarget.cmake)
|
||||||
|
include(${MYX_CMAKE_LIB_DIR}/FetchContentAdd.cmake)
|
||||||
|
|
||||||
set(MYX_CMAKE_TOOLCHAINS_DIR "${MYX_CMAKE_LIB_DIR}/toolchains")
|
set(MYX_CMAKE_TOOLCHAINS_DIR "${MYX_CMAKE_LIB_DIR}/toolchains")
|
||||||
include(${MYX_CMAKE_LIB_DIR}/Toolchains.cmake)
|
include(${MYX_CMAKE_LIB_DIR}/Toolchains.cmake)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
set(MYX_CMAKE_PACKAGE_VERSION "2.4.5")
|
set(MYX_CMAKE_PACKAGE_VERSION "2.4.2")
|
||||||
if(MYX_CMAKE_PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
|
if(MYX_CMAKE_PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
|
||||||
set(PACKAGE_VERSION_COMPATIBLE FALSE)
|
set(PACKAGE_VERSION_COMPATIBLE FALSE)
|
||||||
else()
|
else()
|
||||||
|
79
cmake/myx/lib/AddExternalTarget.cmake
Normal file
79
cmake/myx/lib/AddExternalTarget.cmake
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
#[=======================================================================[.rst:
|
||||||
|
myx_add_external_target
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
Функция для подключения целей из внешних проектов::
|
||||||
|
|
||||||
|
myx_add_external_target(TARGET_NAME
|
||||||
|
[ MODULES_PATH modules_path ] |
|
||||||
|
[ GIT_REPOSITORY url ] |
|
||||||
|
[ GIT_TAG tag ] |
|
||||||
|
[ LOCAL_PATH local_path ] )
|
||||||
|
|
||||||
|
Обязательный параметр: `TARGET_NAME` - имя цели, содержащейся во внешнем проекте.
|
||||||
|
Параметр `MODULES_PATH` содержит имя каталога, в который будут загружаться
|
||||||
|
внешние проекты (по умолчанию `modules`). Параметр `GIT_REPOSITORY` содержит
|
||||||
|
адрес внешнего проекта, который нужно загрузить с помощью git. Параметр `GIT_TAG`
|
||||||
|
содержит используемые метку, идентификатор коммита или ветку в репозитории.
|
||||||
|
Параметр `LOCAL_PATH` используется для указания пути к подкаталогу, находящемуся
|
||||||
|
вне текущего проекта. Его следует указывать только при вызове функции из
|
||||||
|
вспомогательного файла `external_targets.cmake`.
|
||||||
|
|
||||||
|
#]=======================================================================]
|
||||||
|
|
||||||
|
|
||||||
|
find_package(Git)
|
||||||
|
|
||||||
|
function(myx_add_external_target TARGET_NAME)
|
||||||
|
set(options)
|
||||||
|
set(oneValueArgs)
|
||||||
|
set(multiValueArgs MODULES_PATH GIT_REPOSITORY GIT_TAG LOCAL_PATH)
|
||||||
|
cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||||
|
|
||||||
|
if(TARGET ${TARGET_NAME})
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(ARG_LOCAL_PATH)
|
||||||
|
myx_message_notice("Using directory ${ARG_LOCAL_PATH} to build target ${TARGET_NAME}")
|
||||||
|
add_subdirectory(${ARG_LOCAL_PATH} ${CMAKE_BINARY_DIR}/${TARGET_NAME} EXCLUDE_FROM_ALL)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT ARG_MODULES_PATH)
|
||||||
|
set(ARG_MODULES_PATH modules)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_SCRIPT_MODE_FILE)
|
||||||
|
set(PROJECT_SOURCE_DIR ${CMAKE_SOURCE_DIR})
|
||||||
|
endif()
|
||||||
|
set(ARG_MODULES_PATH ${PROJECT_SOURCE_DIR}/${ARG_MODULES_PATH})
|
||||||
|
|
||||||
|
if(NOT IS_DIRECTORY ${ARG_MODULES_PATH})
|
||||||
|
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${ARG_MODULES_PATH})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(GIT_EXECUTABLE)
|
||||||
|
if(NOT IS_DIRECTORY ${ARG_MODULES_PATH}/${TARGET_NAME})
|
||||||
|
execute_process(COMMAND ${GIT_EXECUTABLE} clone ${ARG_GIT_REPOSITORY} ${TARGET_NAME}
|
||||||
|
WORKING_DIRECTORY ${ARG_MODULES_PATH})
|
||||||
|
else()
|
||||||
|
execute_process(COMMAND ${GIT_EXECUTABLE} fetch
|
||||||
|
WORKING_DIRECTORY ${ARG_MODULES_PATH}/${TARGET_NAME})
|
||||||
|
endif()
|
||||||
|
execute_process(COMMAND ${GIT_EXECUTABLE} checkout ${ARG_GIT_TAG}
|
||||||
|
WORKING_DIRECTORY ${ARG_MODULES_PATH}/${TARGET_NAME})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT CMAKE_SCRIPT_MODE_FILE)
|
||||||
|
add_subdirectory(${ARG_MODULES_PATH}/${TARGET_NAME} EXCLUDE_FROM_ALL)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT TARGET ${TARGET_NAME})
|
||||||
|
myx_message_fatal_error("Target ${TARGET_NAME} is not found.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
endfunction(myx_add_external_target)
|
||||||
|
|
||||||
|
include("${PROJECT_SOURCE_DIR}/external_targets.cmake" OPTIONAL)
|
||||||
|
|
@ -1,72 +0,0 @@
|
|||||||
#[=======================================================================[.rst:
|
|
||||||
myx_download_content
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
Функция для загрузки дополнительных репозиториев::
|
|
||||||
|
|
||||||
myx_download_content(NAME
|
|
||||||
[ DOWNLOAD_DIR dir ] |
|
|
||||||
[ GIT_REPOSITORY url ] |
|
|
||||||
[ GIT_TAG tag ] )
|
|
||||||
|
|
||||||
Обязательный параметр: `NAME` - имя целевого каталога.
|
|
||||||
Параметр `DOWNLOAD_DIR` содержит имя каталога, в который будет загружаться
|
|
||||||
содержимое (по умолчанию `downloads`).
|
|
||||||
Параметр `GIT_REPOSITORY` содержит адрес внешнего проекта, который нужно
|
|
||||||
загрузить с помощью git.
|
|
||||||
Параметр `GIT_TAG` содержит используемые метку, идентификатор коммита или
|
|
||||||
ветку в загружаемом репозитории.
|
|
||||||
|
|
||||||
#]=======================================================================]
|
|
||||||
|
|
||||||
find_package(Git QUIET)
|
|
||||||
|
|
||||||
option(ENABLE_DOWNLOAD_CONTENT "Enable download content" ON)
|
|
||||||
|
|
||||||
function(myx_download_content NAME)
|
|
||||||
set(options)
|
|
||||||
set(oneValueArgs)
|
|
||||||
set(multiValueArgs DOWNLOAD_DIR GIT_REPOSITORY GIT_TAG)
|
|
||||||
cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
|
||||||
|
|
||||||
if(NOT CMAKE_SCRIPT_MODE_FILE)
|
|
||||||
if(TARGET myx-download-${NAME})
|
|
||||||
return()
|
|
||||||
else()
|
|
||||||
add_custom_target(myx-download-${NAME})
|
|
||||||
endif()
|
|
||||||
if(NOT TARGET myx-download-content)
|
|
||||||
add_custom_target(myx-download-content)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT ARG_DOWNLOAD_DIR)
|
|
||||||
set(ARG_DOWNLOAD_DIR "_downloads")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(CMAKE_SCRIPT_MODE_FILE)
|
|
||||||
set(PROJECT_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR})
|
|
||||||
endif()
|
|
||||||
set(ARG_DOWNLOAD_DIR ${PROJECT_SOURCE_DIR}/${ARG_DOWNLOAD_DIR})
|
|
||||||
|
|
||||||
if(NOT IS_DIRECTORY ${ARG_DOWNLOAD_DIR})
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${ARG_DOWNLOAD_DIR})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(ENABLE_DOWNLOAD_CONTENT AND GIT_EXECUTABLE AND ARG_GIT_REPOSITORY)
|
|
||||||
if(NOT IS_DIRECTORY ${ARG_DOWNLOAD_DIR}/${NAME})
|
|
||||||
execute_process(COMMAND ${GIT_EXECUTABLE} clone ${ARG_GIT_REPOSITORY} ${NAME}
|
|
||||||
WORKING_DIRECTORY ${ARG_DOWNLOAD_DIR})
|
|
||||||
else()
|
|
||||||
execute_process(COMMAND ${GIT_EXECUTABLE} fetch
|
|
||||||
WORKING_DIRECTORY ${ARG_DOWNLOAD_DIR}/${NAME})
|
|
||||||
endif()
|
|
||||||
execute_process(COMMAND ${GIT_EXECUTABLE} checkout ${ARG_GIT_TAG}
|
|
||||||
WORKING_DIRECTORY ${ARG_DOWNLOAD_DIR}/${NAME})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT CMAKE_SCRIPT_MODE_FILE)
|
|
||||||
add_subdirectory(${ARG_DOWNLOAD_DIR}/${NAME} EXCLUDE_FROM_ALL)
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
||||||
|
|
56
cmake/myx/lib/FetchContentAdd.cmake
Normal file
56
cmake/myx/lib/FetchContentAdd.cmake
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
#[=======================================================================[.rst:
|
||||||
|
FetchContent_Add
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Вспомогательная функция для `FetchContent_Declare()`::
|
||||||
|
|
||||||
|
FetchContent_Add(NAME
|
||||||
|
[ GIT_REPOSITORY repo ] |
|
||||||
|
[ GIT_REMOTE remote ] |
|
||||||
|
[ GIT_PATH path ])
|
||||||
|
|
||||||
|
Обязательные параметры: `NAME` - идентификатор загружаемого ресурса.
|
||||||
|
Параметр `GIT_REPOSITORY` определяет имя репозитория по умолчанию.
|
||||||
|
Если указана пара параметров `GIT_REMOTE` и `GIT_PATH` и у git-репозитория
|
||||||
|
основного проекта указан удалённый репозиторий с именем, определяемым
|
||||||
|
переменной `GIT_REMOTE`, то адрес репозитория для получения проекта
|
||||||
|
изменяется. В этом случае загрузка будет производиться с сервера,
|
||||||
|
определяемого из адреса с меткой `GIT_REMOTE`, и по пути `GIT_PATH`.
|
||||||
|
|
||||||
|
#]=======================================================================]
|
||||||
|
|
||||||
|
include_guard(GLOBAL)
|
||||||
|
|
||||||
|
# Обязательно в глобальной области
|
||||||
|
find_package(Git)
|
||||||
|
|
||||||
|
function(FetchContent_Add TARGET_NAME)
|
||||||
|
set(options "")
|
||||||
|
set(oneValueArgs GIT_REPOSITORY GIT_REMOTE GIT_PATH)
|
||||||
|
set(multiValueArgs "")
|
||||||
|
|
||||||
|
cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||||
|
|
||||||
|
if(GIT_FOUND AND ARG_GIT_REMOTE AND ARG_GIT_PATH)
|
||||||
|
execute_process(COMMAND ${GIT_EXECUTABLE} config --get remote.${ARG_GIT_REMOTE}.url OUTPUT_VARIABLE REMOTE_URL ERROR_QUIET)
|
||||||
|
if(REMOTE_URL)
|
||||||
|
string(REGEX REPLACE ":.*" "" SERVER ${REMOTE_URL})
|
||||||
|
string(FIND ${SERVER} "http" POS)
|
||||||
|
if(NOT POS EQUAL 0)
|
||||||
|
if(NOT SERVER STREQUAL REMOTE_URL)
|
||||||
|
set(ARG_GIT_REPOSITORY "${SERVER}:${ARG_GIT_PATH}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
FetchContent_Declare(
|
||||||
|
${TARGET_NAME}
|
||||||
|
${ARG_UNPARSED_ARGUMENTS}
|
||||||
|
GIT_REPOSITORY ${ARG_GIT_REPOSITORY}
|
||||||
|
GIT_SHALLOW 1
|
||||||
|
)
|
||||||
|
|
||||||
|
set(FETCHCONTENT_QUIET off)
|
||||||
|
FetchContent_MakeAvailable(${TARGET_NAME})
|
||||||
|
endfunction()
|
@ -2,7 +2,7 @@ if(${CMAKE_VERSION} VERSION_LESS "3.17.0")
|
|||||||
set(MYX_CMAKE_LIB_DOC_DIR_BACKPORT "${CMAKE_CURRENT_LIST_DIR}")
|
set(MYX_CMAKE_LIB_DOC_DIR_BACKPORT "${CMAKE_CURRENT_LIST_DIR}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
find_package(Doxygen QUIET)
|
find_package(Doxygen)
|
||||||
|
|
||||||
function(myx_doc_doxygen TARGET_NAME)
|
function(myx_doc_doxygen TARGET_NAME)
|
||||||
if(${CMAKE_VERSION} VERSION_LESS "3.17.0")
|
if(${CMAKE_VERSION} VERSION_LESS "3.17.0")
|
||||||
|
@ -7,7 +7,7 @@ set(GIT_DIFF "")
|
|||||||
set(GIT_TAG "N/A")
|
set(GIT_TAG "N/A")
|
||||||
set(GIT_BRANCH "N/A")
|
set(GIT_BRANCH "N/A")
|
||||||
|
|
||||||
find_package(Git QUIET)
|
find_package(Git)
|
||||||
|
|
||||||
if(GIT_EXECUTABLE)
|
if(GIT_EXECUTABLE)
|
||||||
execute_process(COMMAND ${GIT_EXECUTABLE} log --pretty=format:'%h' -n 1 OUTPUT_VARIABLE GIT_REV ERROR_QUIET)
|
execute_process(COMMAND ${GIT_EXECUTABLE} log --pretty=format:'%h' -n 1 OUTPUT_VARIABLE GIT_REV ERROR_QUIET)
|
||||||
|
@ -20,11 +20,11 @@ if(ENV{MYX_CMAKE_DIR})
|
|||||||
set(MYX_CMAKE_DIR $ENV{MYX_CMAKE_DIR})
|
set(MYX_CMAKE_DIR $ENV{MYX_CMAKE_DIR})
|
||||||
endif()
|
endif()
|
||||||
if(MYX_CMAKE_DIR)
|
if(MYX_CMAKE_DIR)
|
||||||
find_package(MyxCMake 2.4.5 REQUIRED CONFIG PATHS ${MYX_CMAKE_DIR} NO_DEFAULT_PATH)
|
find_package(MyxCMake 2.4.2 REQUIRED CONFIG PATHS ${MYX_CMAKE_DIR} NO_DEFAULT_PATH)
|
||||||
myx_message_notice("== MyxCMake directory: ${MyxCMake_CONFIG} ==")
|
myx_message_notice("== MyxCMake directory: ${MyxCMake_CONFIG} ==")
|
||||||
else()
|
else()
|
||||||
if(MYX_CMAKE_USE_SYSTEM)
|
if(MYX_CMAKE_USE_SYSTEM)
|
||||||
find_package(MyxCMake 2.4.5 REQUIRED)
|
find_package(MyxCMake 2.4.2 REQUIRED)
|
||||||
myx_message_notice("== MyxCMake directory: ${MyxCMake_CONFIG} ==")
|
myx_message_notice("== MyxCMake directory: ${MyxCMake_CONFIG} ==")
|
||||||
else()
|
else()
|
||||||
include(${PROJECT_SOURCE_DIR}/cmake/myx/MyxCMakeConfig.cmake)
|
include(${PROJECT_SOURCE_DIR}/cmake/myx/MyxCMakeConfig.cmake)
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
# Подключение файла с функцией для загрузки содержимого
|
|
||||||
# командой cmake в режиме запуска скриптов. Пример команды:
|
|
||||||
#
|
|
||||||
# cmake -P myx_download_content.cmake
|
|
||||||
#
|
|
||||||
if(CMAKE_SCRIPT_MODE_FILE)
|
|
||||||
include("cmake/myx/lib/DownloadContent.cmake")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
myx_download_content(myx-example-interface-library
|
|
||||||
GIT_REPOSITORY git@gitlab.2:myx/examples/myx-example-interface-library)
|
|
||||||
myx_download_content(myx-example-object-library
|
|
||||||
GIT_REPOSITORY git@gitlab.2:myx/examples/myx-example-object-library)
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user