diff --git a/3rdparty/libcmext/CMakeLists.txt b/3rdparty/libcmext/CMakeLists.txt new file mode 100644 index 0000000..080f94c --- /dev/null +++ b/3rdparty/libcmext/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.3) +project(cmext) + +include(GNUInstallDirs) +add_library(cmext cmext.cpp) +install(TARGETS cmext ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) +install(FILES cmext.hpp COMPONENT headers DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${CMAKE_PROJECT_NAME}) + diff --git a/3rdparty/libcmext/cmext.cpp b/3rdparty/libcmext/cmext.cpp new file mode 100644 index 0000000..9c52149 --- /dev/null +++ b/3rdparty/libcmext/cmext.cpp @@ -0,0 +1,6 @@ +#include "cmext.hpp" + +int32_t cmext_init(int32_t i = 0) { + return i; +} + diff --git a/3rdparty/libcmext/cmext.hpp b/3rdparty/libcmext/cmext.hpp new file mode 100644 index 0000000..b33d5f7 --- /dev/null +++ b/3rdparty/libcmext/cmext.hpp @@ -0,0 +1,9 @@ +#ifndef CMEXT_CMEXT_HPP_ +#define CMEXT_CMEXT_HPP_ + +#include + +int32_t cmext_init(int32_t i); + +#endif + diff --git a/CMakeLists.txt b/CMakeLists.txt index 260cbe8..27aedda 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,6 +32,18 @@ find_package(Qt5 COMPONENTS Core Network Gui Widgets DBus Concurrent Sql REQUIRE # Автоматически генерируемый заголовочный файл cmlib_config_hpp_generate() +# Подключение внешних проектов +include(ExternalProject) + +ExternalProject_Add(cmext + EXCLUDE_FROM_ALL TRUE + SOURCE_DIR ${CMAKE_SOURCE_DIR}/3rdparty/libcmext + INSTALL_DIR ${CMAKE_BINARY_DIR} + DOWNLOAD_COMMAND "" + BUILD_BYPRODUCTS /lib/libcmext.a + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH= -DCMAKE_BUILD_TYPE=Release + ) + # Библиотека add_subdirectory(src/libcmex) diff --git a/src/cmex/CMakeLists.txt b/src/cmex/CMakeLists.txt index a787bee..e4fda13 100644 --- a/src/cmex/CMakeLists.txt +++ b/src/cmex/CMakeLists.txt @@ -17,6 +17,14 @@ add_dependencies(${current_target} cmex) target_include_directories(${current_target} PUBLIC $) +# Зависимость от библиотеки из внешнего проекта проекта +add_dependencies(${current_target} cmext) + +# Добавление каталога, в который устанавливаются заголовочные файлы +# от внешнего проекта cmext, к списку путей для поиска заголовочных файлов +target_include_directories(${current_target} PUBLIC + $) + # Имя выходного файла для цели set_target_properties(${current_target} PROPERTIES @@ -30,6 +38,9 @@ link_directories(${CMAKE_INSTALL_LIBDIR}) # Сначала внутренние статические библиотеки target_link_libraries(${current_target} cmex_static) +# Библиотека из внешнего проекта cmext +target_link_libraries(${current_target} ${CMAKE_BINARY_DIR}/lib/libcmext.a) + # Правила для установки install(TARGETS ${current_target} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/src/cmex/main.cpp b/src/cmex/main.cpp index de1914c..ce3b05f 100644 --- a/src/cmex/main.cpp +++ b/src/cmex/main.cpp @@ -2,6 +2,7 @@ #include "config.hpp" #include +#include #include "cmex.hpp" @@ -10,6 +11,7 @@ int main(int argc, char **argv) { std::cout << BUILD_TYPE << std::endl; // Значение из config.hpp std::cout << CMEX_VERSION_STR << std::endl; // Значение из config.hpp std::cout << cmex_init(4) << std::endl; // Функция из внутренней библиотеки + std::cout << cmext_init(9) << std::endl; // Функция из внешней библиотеки return 0; }