Перейти к основному содержимому

CMake — первая программа

Разработчику Архитектору

CMake — первая программа

CMake генерирует файлы сборки (Ninja, Make, Visual Studio) из CMakeLists.txt. Это стандарт для open-source C++ и для Qt.

Теория конфигураций: Конфигурация и сборка. Тесты: Google Test и Catch2.


Структура

hello-cmake/
├── CMakeLists.txt
├── src/
│ └── main.cpp
└── include/
└── greet.hpp

CMakeLists.txt (корень)

cmake_minimum_required(VERSION 3.20)
project(hello_cmake VERSION 0.1.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_executable(hello
src/main.cpp
)

target_include_directories(hello PRIVATE include)

Исходники

include/greet.hpp:

#pragma once
#include <string>

std::string greet(const std::string& name);

src/main.cpp:

#include "greet.hpp"
#include <iostream>

int main() {
std::cout << greet("CMake") << '\n';
return 0;
}

Добавьте src/greet.cpp с реализацией greet или inline в заголовке для минимального примера.

src/greet.cpp:

#include "greet.hpp"

std::string greet(const std::string& name) {
return "Hello, " + name + "!";
}

И в CMakeLists.txt: src/greet.cpp в add_executable.


Сборка

cmake -S . -B build -G Ninja
cmake --build build
./build/hello # Linux/macOS
build\Debug\hello.exe # MSVC multi-config

Release:

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build

Подключение библиотеки (FetchContent)

include(FetchContent)
FetchContent_Declare(
fmt
GIT_REPOSITORY https://github.com/fmtlib/fmt.git
GIT_TAG 10.2.1
)
FetchContent_MakeAvailable(fmt)
target_link_libraries(hello PRIVATE fmt::fmt)

Для production чаще используют vcpkg или Conan.


Связанные материалы


См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).