Evgenii Legotckoi
13 грудня 2018 р. 02:57

Проект CMake з підкаталогами та статичною бібліотекою

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

В результаті проект виглядатиме так.

Проект зі статичною бібліотекою


Корінь 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")

# We declare the project as a static library and add all the source code files to it.
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})

# Connecting the library, specify where to get the header files
include_directories("../MyStaticLibrary")
# And also we specify dependence on static library
target_link_libraries(ExampleStatic MyStaticLibrary)

main.cpp

#include <iostream>

#include "MyStaticLibrary.h"

using namespace std; 

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

Висновок

Насамкінець результат роботи програми з цією статично доданою бібліотекою.

Приклад статичного проекту

Вам це подобається? Поділіться в соціальних мережах!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up