From c8b1f1d1f6677c4362a625ff549137f9556d24ba Mon Sep 17 00:00:00 2001 From: Andrey Astafyev Date: Thu, 9 Dec 2021 17:31:49 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B8=D0=BC=D0=B5=D1=80=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 41 ++++++++++++++++++++++++ src/myx-cmake-example-app/CMakeLists.txt | 18 +++++++++++ src/myx-cmake-example-app/main.cpp | 29 +++++++++++++++++ 3 files changed, 88 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 src/myx-cmake-example-app/CMakeLists.txt create mode 100644 src/myx-cmake-example-app/main.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..cf79cf8 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,41 @@ +# Минимальная версия CMake +cmake_minimum_required(VERSION 3.3) + +# Предпочтительно следовать стандартам принятым в указанном диапазоне версий +cmake_policy(VERSION 3.0.2..3.7) + +# Название и версия проекта и используемые языки программирования +project(myx-cmake-example-app VERSION 0.2.0 LANGUAGES C CXX) + +### +# Обязательные переменные для MyxCMake +### +# Название организации +set(MYX_CMAKE_ORGANIZATION_NAME "Org." CACHE STRING "") + +# Имя автора +set(MYX_CMAKE_AUTHOR_NAME "John Doe" CACHE STRING "") + +# Почта автора +set(MYX_CMAKE_AUTHOR_EMAIL "mail@johndoe.com" CACHE STRING "") + +# Краткое описание проекта +set(MYX_CMAKE_DESCRIPTION "Пример проекта: программа" CACHE STRING "") + +find_package(MyxCMake REQUIRED) + +# Boost +set(Boost_USE_STATIC_LIBS ON) +set(Boost_USE_MULTITHREADED OFF) +set(Boost_USE_STATIC_RUNTIME ON) +find_package(Boost 1.55.0 REQUIRED) + +# Автоматически генерируемый заголовочный файл +myx_cmake_generate_private_config_header() + +# Автоматически генерируемый файл с информацией о репозитории +myx_cmake_generate_git_info_header() + +# Исходные тексты библиотеки +add_subdirectory(src/myx-cmake-example-app) + diff --git a/src/myx-cmake-example-app/CMakeLists.txt b/src/myx-cmake-example-app/CMakeLists.txt new file mode 100644 index 0000000..b1eee99 --- /dev/null +++ b/src/myx-cmake-example-app/CMakeLists.txt @@ -0,0 +1,18 @@ +# Название основной цели и имени программы в текущем каталоге +set(TRGT myx-cmake-example-app) + +# Список файлов исходных текстов +set(TRGT_cpp ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp) + +# Функция для создания цели, результатом которой будет сборка приложения +add_executable(${TRGT} ${TRGT_cpp}) +myx_cmake_common_target_properties(${TRGT}) + +# Добавление к пути поиска заголовочных файлов +target_include_directories(${TRGT} SYSTEM PUBLIC ${Boost_INCLUDE_DIRS}) + +# Имя выходного файла для цели +set_target_properties(${TRGT} PROPERTIES OUTPUT_NAME ${TRGT}) + +# Правила для установки +install(TARGETS ${TRGT} COMPONENT main RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/src/myx-cmake-example-app/main.cpp b/src/myx-cmake-example-app/main.cpp new file mode 100644 index 0000000..4caebb8 --- /dev/null +++ b/src/myx-cmake-example-app/main.cpp @@ -0,0 +1,29 @@ +#include +#include + +#include +#include + +int32_t nsum( int32_t i = 0 ) +{ + int32_t s = 0; + for ( auto r: boost::counting_range( 1, i ) ) + { + s += r; + } + return( s ); +} + + +int main( int argc, char* argv[] ) +{ + // Значение из myx_cmake_private_config.hpp + std::cout << "Build type: " << MYX_CMAKE_BUILD_TYPE << std::endl; + // Значение из myx_cmake_git_info.hpp + std::cout << "Git revision: " << MYX_CMAKE_EXAMPLE_APP_GIT_REV << std::endl; + + auto s = nsum( argc ); + std::cout << s << std::endl; + + return ( s ); +}