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

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

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

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

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


Корінь CMakeLists.txt

Основний CMakeLists.txt міститиме підключення всіх підкаталогів.

  1. cmake_minimum_required (VERSION 3.8)
  2.  
  3. project (Example)
  4.  
  5. add_subdirectory (MyStaticLibrary)
  6. add_subdirectory (ExampleStatic)

MyStaticLibrary

Далі йде статична бібліотека, в якій буде клас, який повертає повідомлення Hello World.

CMakeLists.txt

  1. cmake_minimum_required (VERSION 3.8)
  2.  
  3. project(MyStaticLibrary)
  4.  
  5. set(SOURCE_FILES "MyStaticLibrary.cpp")
  6. set(HEADER_FILES "MyStaticLibrary.h")
  7.  
  8. # We declare the project as a static library and add all the source code files to it.
  9. add_library(MyStaticLibrary STATIC ${HEADER_FILES} ${SOURCE_FILES})

MyStaticLibrary.h

  1. #pragma once
  2.  
  3. #include <string>
  4.  
  5. class MyStaticLibrary
  6. {
  7. public:
  8. static std::string getMyStaticMessage();
  9. };

MyStaticLibrary.cpp

  1. #include "MyStaticLibrary.h"
  2.  
  3. std::string MyStaticLibrary::getMyStaticMessage()
  4. {
  5. return "Hello world from static library";
  6. }

ExampleStatic

А це проект створення бінарника і він містить файл main.cpp з функцією main.

CMakeLists.txt

  1. cmake_minimum_required (VERSION 3.8)
  2.  
  3. project(ExampleStatic)
  4.  
  5. set(SOURCE_FILES "main.cpp")
  6.  
  7. add_executable (ExampleStatic ${SOURCE_FILES})
  8.  
  9. # Connecting the library, specify where to get the header files
  10. include_directories("../MyStaticLibrary")
  11. # And also we specify dependence on static library
  12. target_link_libraries(ExampleStatic MyStaticLibrary)

main.cpp

  1. #include <iostream>
  2.  
  3. #include "MyStaticLibrary.h"
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9. cout << MyStaticLibrary::getMyStaticMessage() << endl;
  10. return 0;
  11. }

Висновок

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

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

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

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
  • Останні коментарі
  • Evgenii Legotckoi
    16 квітня 2025 р. 17:08
    Благодарю за отзыв. И вам желаю всяческих успехов!
  • IscanderChe
    12 квітня 2025 р. 17:12
    Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
  • AK
    01 квітня 2025 р. 11:41
    Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
  • Evgenii Legotckoi
    09 березня 2025 р. 21:02
    К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
  • VP
    09 березня 2025 р. 16:14
    Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…