diff --git a/CMakeLists.txt b/CMakeLists.txt index 27567ed..f1ec493 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,21 +5,28 @@ cmake_minimum_required(VERSION 3.3) cmake_policy(VERSION 3.0.2..3.7) # Название и версия проекта и используемые языки программирования -project(FIXME VERSION 0.2.0 LANGUAGES C CXX) +project(myx-cmake-example-features VERSION 0.2.0 LANGUAGES CXX) ### # Обязательные переменные для MyxCMake ### # Название организации -set(MYX_CMAKE_ORGANIZATION_NAME "FIXME" CACHE STRING "") +set(MYX_CMAKE_ORGANIZATION_NAME "Org." CACHE STRING "") # Имя автора -set(MYX_CMAKE_AUTHOR_NAME "FIXME" CACHE STRING "") +set(MYX_CMAKE_AUTHOR_NAME "John Doe" CACHE STRING "") # Почта автора -set(MYX_CMAKE_AUTHOR_EMAIL "FIXME" CACHE STRING "") +set(MYX_CMAKE_AUTHOR_EMAIL "mail@johndoe.com" CACHE STRING "") # Краткое описание проекта -set(MYX_CMAKE_DESCRIPTION "FIXME" CACHE STRING "") +set(MYX_CMAKE_DESCRIPTION "Пример проекта: разные возможности" CACHE STRING "") + +find_package(MyxCMake 0.3.7 REQUIRED) + +# Qt5 +find_package(Qt5 COMPONENTS Core REQUIRED) + +# Приложение +add_subdirectory(src/myx-cmake-example-features) -find_package(MyxCMake 0.3.2 REQUIRED) diff --git a/src/myx-cmake-example-features/CMakeLists.txt b/src/myx-cmake-example-features/CMakeLists.txt new file mode 100644 index 0000000..957e59f --- /dev/null +++ b/src/myx-cmake-example-features/CMakeLists.txt @@ -0,0 +1,32 @@ +# Название основной цели и имени программы в текущем каталоге +set(TRGT myx-cmake-example-features) + +# Список файлов исходных текстов +set(TRGT_cpp ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp) + +# Заголовочные файлы, для которых необходима обработка препроцессором moc +# (содержат класс, унаследованный от QObject, использующий сигналы и/или слоты) +set(TRGT_moc_hpp ${CMAKE_CURRENT_SOURCE_DIR}/processor.hpp) + +# Заголовочные файлы +set(TRGT_hpp) + +set(TRGT_headers ${TRGT_hpp} ${TRGT_moc_hpp}) + +# Правило для автоматической генерации препроцессором moc +qt5_wrap_cpp(TRGT_moc_cpp ${TRGT_moc_hpp}) + +# Функция для создания цели, результатом которой будет сборка приложения +add_executable(${TRGT} ${TRGT_cpp} ${TRGT_headers} ${TRGT_moc_cpp}) +myx_cmake_common_target_properties(${TRGT}) + +# Qt5: подключение заголовочных файлов +target_include_directories(${TRGT} SYSTEM PUBLIC ${Qt5Core_INCLUDE_DIRS}) + +# Qt5: подключение библиотек +target_link_libraries(${TRGT} Qt5::Core) + +# Дополнительные функции для цели ${TRGT}. +# Вызов обязательно после всех функций target_link_libraries +myx_cmake_common_target_properties_post_link(${TRGT}) + diff --git a/src/myx-cmake-example-features/main.cpp b/src/myx-cmake-example-features/main.cpp new file mode 100644 index 0000000..c303c89 --- /dev/null +++ b/src/myx-cmake-example-features/main.cpp @@ -0,0 +1,50 @@ +#include "processor.hpp" + +#include +#include +#include +#include + +int qStringToInt( const QString s ) +{ + return( s.toInt() ); +} + + +int main( int argc, char** argv ) +{ + QCoreApplication app( argc, argv ); + + // qt-keywords + QList< int > il; + il << 111 << 222; + Q_FOREACH ( int i, il ) + { + qDebug() << i; + } + + QStringList sl; + sl << "111" << "222"; + for ( auto s: sl ) + { + qDebug() << s; + } + + for ( auto s: qAsConst( sl ) ) + { + s.append( "0" ); + } + + QString s { QStringLiteral( "100" ) }; + auto ir = qStringToInt( s ); + + QFile f; + Processor p; + QObject::connect( &app, SIGNAL(aboutToQuit()), &p, SLOT(process())); + QTimer::singleShot( 100, &app, SLOT(quit())); + + int arr[3]; + qCritical() << arr[2]; + + return( QCoreApplication::exec() ); +} // main diff --git a/src/myx-cmake-example-features/processor.hpp b/src/myx-cmake-example-features/processor.hpp new file mode 100644 index 0000000..b3d1800 --- /dev/null +++ b/src/myx-cmake-example-features/processor.hpp @@ -0,0 +1,16 @@ +#ifndef PROCESSOR_HPP_ +#define PROCESSOR_HPP_ + +#pragma once + +#include +#include + +class Processor : public QObject +{ + Q_OBJECT +public: + Q_SLOT void process() { qCritical() << "about to close"; } +}; + +#endif