Зміст
Пропоную написати невелику програму, яка матиме два підкаталоги. Один з яких компілюватиме виконуваний файл, а другий буде містити бібліотеку, що статично підключається.
В результаті проект виглядатиме так.
Корінь 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;
- }
Висновок
Насамкінець результат роботи програми з цією статично доданою бібліотекою.