Перейти к основному содержимому

Использование статической библиотеки

Обновление CMakeLists.txt главного проекта

к сведению

При подготовке материала использовалась статья Полное руководство по CMake. Часть вторая: Система сборки.

Давайте теперь сообщим CMake о том, что у нас в директории содержится статическая библиотека. Для этого изменим CMakeLists.txt главного проекта (лежащий в корне директории lab1) следующим образом:

cmake_minimum_required(VERSION 3.23)

set(project "lab1")
project(${project})

set(CMAKE_CXX_STANDARD 17)

set(${project}_SOURCES
main.cpp)

add_subdirectory(mymath)

set(${project}_SOURCE_LIST
${${project}_SOURCES})

add_executable(${project}
${${project}_SOURCE_LIST})

target_link_libraries(${project} mymath)

Тут мы чутка навернули переменных окружения, но смотрим на два важных изменения:

  • команда add_subdirectory побуждает CMake к незамедлительной обработке указанного файла подпроекта. Так как в CMakeLists.txt нашего подпроекта происходит подготовка статической библиотеки, то в основном проекте мы можем это использовать.
  • target_link_libraries компонует библиотеку или исполняемый файл с другими предоставляемыми библиотеками. Первым аргументом данная команда принимает название цели, сгенерированной с помощью команд add_executable или add_library, а последующие аргументы представляют собой названия целей библиотек или полные пути к библиотекам.

Таким образом при сборке основной проект будет знать о других библиотеках.

Изменения main.cpp

Для демонстрации получившегося результата изменим файл main.cpp следующим образом:

#include <iostream>
#include "mymath/mymath.h"

int main() {
setlocale(LC_ALL, "Russian");
std::cout << "Я умею суммировать! Зацени 1+1=";
std::cout << mymath::sum(10, 32) << std::endl;

return 0;
}

А как отлаживать получившийся проект?

А об этом смотрите официальную доку:

А что дальше?

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

Мем