8. Разобрать /
Информационные технологии /
Разработка ПО /
Язык программирования C++ /
Пример мултимодульного проекта на C++
Для автоматизации сборки проекта cpp-multi-module
используем инструмент CMake1 и его файлы описания сборок - CMakeLists.txt
. Популярные интегрированные среды разработки (IDE) понимают данный формат из коробки, при открытии директории проекта.
Иерархия файлов в проекте
app1/
src/
main.cpp
CMakeLists.txt
app2/
src/
main.cpp
CMakeLists.txt
build/
lib1/
CMakeLists.txt
library.cpp
library.h
CMakeLists.txt
Содержимое файлов проекта
Создаём файлы со следующим содержимым.
app1/src/main.cpp
#include "../../lib1/library.h" using namespace std; int main() { hello("app1"); }
app1/CMakeLists.txt
add_executable(app1 src/main.cpp) target_link_libraries(app1 LINK_PRIVATE lib1)
app2/src/main.cpp
#include "../../lib1/library.h" using namespace std; int main() { hello("app2"); }
app2/CMakeLists.txt
add_executable(app2 src/main.cpp) target_link_libraries(app2 LINK_PRIVATE lib1)
lib1/CMakeLists.txt
add_library(lib1 STATIC library.cpp)
lib1/library.cpp
#include <iostream> #include "library.h" using namespace std; void hello(const string &name) { cout << "Hello, " << name << "!" << endl; }
lib1/library.h
#ifndef LIB1_LIBRARY_H #define LIB1_LIBRARY_H #include <string> void hello(const std::string &name); #endif //LIB1_LIBRARY_H
CMakeLists.txt
cmake_minimum_required(VERSION 3.25) project(cpp-multi-module LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) # Дочерние модули add_subdirectory(app1) add_subdirectory(app2) add_subdirectory(lib1)
Сборка проекта
Собираем проект помещая исполняемые файлы в директорию build
.
cmake -B build && make -C build
Запуск приложений
$ build/app1/app1
Hello, app1!
$ build/app2/app2
Hello, app2!