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