Подключение библиотеки из внешнего проекта

This commit is contained in:
Andrei Astafev 2019-02-13 00:53:51 +03:00
parent 1f12b5ad28
commit bbb9f4a61a
6 changed files with 48 additions and 0 deletions

8
3rdparty/libcmext/CMakeLists.txt vendored Normal file
View File

@ -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})

6
3rdparty/libcmext/cmext.cpp vendored Normal file
View File

@ -0,0 +1,6 @@
#include "cmext.hpp"
int32_t cmext_init(int32_t i = 0) {
return i;
}

9
3rdparty/libcmext/cmext.hpp vendored Normal file
View File

@ -0,0 +1,9 @@
#ifndef CMEXT_CMEXT_HPP_
#define CMEXT_CMEXT_HPP_
#include <stdint.h>
int32_t cmext_init(int32_t i);
#endif

View File

@ -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 <INSTALL_DIR>/lib/libcmext.a
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DCMAKE_BUILD_TYPE=Release
)
# Библиотека
add_subdirectory(src/libcmex)

View File

@ -17,6 +17,14 @@ add_dependencies(${current_target} cmex)
target_include_directories(${current_target} PUBLIC
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/libcmex>)
# Зависимость от библиотеки из внешнего проекта проекта
add_dependencies(${current_target} cmext)
# Добавление каталога, в который устанавливаются заголовочные файлы
# от внешнего проекта cmext, к списку путей для поиска заголовочных файлов
target_include_directories(${current_target} PUBLIC
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include/cmext>)
# Имя выходного файла для цели
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})

View File

@ -2,6 +2,7 @@
#include "config.hpp"
#include <iostream>
#include <cmext/cmext.hpp>
#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;
}