Предлагаю написать небольшое приложение, которое будет иметь два подкаталога. Один из которых будет компилировать исполняемый файл, а второй будет содержать статически подключаемую библиотеку.
В результате проект будет выглядеть так.
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") # 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; }
Вывод
В заключение вот результат работы программы с этой статически добавленной библиотекой.