CMake проект с поддиректориями и статической библиотекой

Boost, static, static link

Предлагаю написать небольшое приложение, которое будет иметь две поддиректории. Одна из которых будет собирать исполняемый файл, а вторая будет содержать статически подключаемую библиотеку.

В результате проект будет выглядеть следующим образом

Project with static library

Root CMakeLists.txt

Основной CMakeLists.txt будет содержать подключение всех поддиректорий.

cmake_minimum_required (VERSION 3.8)

project (Example)

add_subdirectory (MyStaticLibrary)
add_subdirectory (ExampleStatic)

MyStaticLibrary

Далее идёт статическая библиотека, которая будет иметь класс, возвращающий Hello World сообщение.

CMakeLists.txt

cmake_minimum_required (VERSION 3.8)

project(MyStaticLibrary)

set(SOURCE_FILES "MyStaticLibrary.cpp")
set(HEADER_FILES "MyStaticLibrary.h")

# объявляем проект как статическую библиотеку и добавляем в него все файлы исходных кодов
add_library(MyStaticLibrary STATIC ${HEADER_FILES} ${SOURCE_FILES})

MyStaticLibrary.h

#pragma once

#include <string>

class MyStaticLibrary
{
public:
    static std::string getMyStaticMessage();
};

MyStaticLibrary.cpp

#include "MyStaticLibrary.h"

std::string MyStaticLibrary::getMyStaticMessage()
{
    return "Hello world from static library";
}

ExampleStatic

А это уже проект для создания бинарника и он содержит main.cpp файл с main функцией.

CMakeLists.txt

cmake_minimum_required (VERSION 3.8)

project(ExampleStatic)

set(SOURCE_FILES "main.cpp")

add_executable (ExampleStatic ${SOURCE_FILES})

# Подключение библиотеки, указываем, откуда брать заголовочные файлы
include_directories("../MyStaticLibrary")
# А также указываем зависимость от статической библиотеки
target_link_libraries(ExampleStatic MyStaticLibrary)

main.cpp

#include <iostream>

#include "MyStaticLibrary.h"

using namespace std; 

int main()
{
    cout << MyStaticLibrary::getMyStaticMessage() << endl;
    return 0;
}

Заключение

В качестве заключения вот результат работы программы с данной статически добавленной библиотекой

Example static project

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
Поддержать автора Donate

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Donate

Здравствуйте, уважаемые пользователи EVILEG !!!

Если сайт вам помог, то поддержите разработку сайта финансово, пожалуйста.

Вы можете сделать это следующими способами:

Спасибо, Евгений Легоцкой

ЛП
12 ноября 2019 г. 8:22
Лев Пархимович

C++ - Тест 006. Перечисления

  • Результат:50баллов,
  • Очки рейтинга-4
ЛП
12 ноября 2019 г. 7:35
Лев Пархимович

C++ - Тест 005. Структуры и Классы

  • Результат:66баллов,
  • Очки рейтинга-1
ЛП
12 ноября 2019 г. 7:26
Лев Пархимович

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:50баллов,
  • Очки рейтинга-4
Последние комментарии
b
9 ноября 2019 г. 8:28
bastonc

спасибо ещё раз. огромное, за уделённое время
b
9 ноября 2019 г. 8:24
bastonc

Спасибо Вам большое. Буду изучать.
9 ноября 2019 г. 5:58
Евгений Легоцкой

Добрый день. По первым двум вопросам вы найдёте ответ в этой статье - PyQt5 - Урок 008. Работа с QTableWidget (Обновление урока 006) Что касается последнего вопроса, то я вам…
9 ноября 2019 г. 2:50
Евгений Легоцкой

Как и обещал, вы можете посмотреть новую статью QML - Урок 037. Кастомизация кнопок в QML (Обновление урока 002) . Там же найдёте ссылку на Git репозиторий. Не забудьте поставить звёз…
b
8 ноября 2019 г. 7:40
bastonc

Приветствую. Подскажите пожалуйста пару моментов. 1. Как сделать столбец не редактируемый, а остальные ячейки остаются редактируемыми 2. Как оталвливать события двойного клика для реда…
Сейчас обсуждают на форуме
14 ноября 2019 г. 4:23
Ruslan Polupan

Я уже понял это, ковыряюсь сижу....
14 ноября 2019 г. 3:56
Евгений Легоцкой

Добрый день. Я уже очень давно не создавал инсталляторы, но на данный момент поведение Maintenance Tool выглядит так, что он имеет свой собственный пакет в репозитории. Но честно, я могу с…
14 ноября 2019 г. 2:16
Ruslan Polupan

посмотрите тут http://www.prog.org.ru/topic_6637_15.html И гдето на Гитхабе я видел исходни класса который это реализует
13 ноября 2019 г. 9:33
Pavel.K

Приложение трэкинг задач. Есть вложения. Добавляем вложение и отправляем его на сервер. Для синхронного вызова методов в синхронизации, используем QEventLoop при отправке вложений. В момент син…
13 ноября 2019 г. 3:13
Евгений Легоцкой

Добрый день. Думаю, что да. Выбранный стиль можно подгружать при запуске программы. Во всяком случае, есть такой пример на C++ - Controls Gallery . И там есть такой код #incl…
EVILEG
О нас
Услуги
© EVILEG 2015-2019
Рекомендует хостинг TIMEWEB