Компиляция import std; с CMake

Вопрос или проблема

Я пытаюсь использовать модули C++ в новом проекте.

import std;

int main(){
    std::print("Hello, world!");
}

Это должно компилироваться под C++23. Документация CMake предполагает, что если вы используете CMake 3.28+, Clang 18+ и libc++, это можно скомпилировать на практике.

Мне удалось установить на Ubuntu (wsl) CMake 3.30 и Clang 19. Оба, казалось, работают как нужно. Однако я не нашел достаточной документации о том, как установить libc++, который, похоже, не установлен, но необходим для работы import std. Я пытался следовать этому посту, но, похоже, репозиторий перемещен? Документы на сайте libc++ имели аналогичную проблему. Также, если есть более простой способ скомпилировать этот код с CMake, я был бы рад этому.

Ответ или решение

Для компиляции кода с использованием модулей C++ в проекте с помощью CMake и библиотеки libc++, выполните следующие шаги:

Установка необходимых инструментов

  1. Убедитесь, что у вас установлены CMake, Clang и libc++. Вы уже указали, что у вас установлены CMake 3.30 и Clang 19, что является отличным началом.

  2. Установка libc++ и libc++abi:
    Чтобы установить libc++ и libc++abi, выполните следующую команду в терминале WSL:

    sudo apt install libc++-dev libc++abi-dev
  3. Проверьте установку:
    Убедитесь, что libc++ успешно установлен, выполнив команду:

    dpkg -l | grep libc++

Настройка проекта CMake

  1. Создайте структуру вашего проекта:
    Создайте новую папку для вашего проекта и создайте файл CMakeLists.txt в этой папке.

    mkdir MyProject
    cd MyProject
    touch CMakeLists.txt
  2. Заполните CMakeLists.txt:
    Вставьте следующий код в ваш файл CMakeLists.txt:

    cmake_minimum_required(VERSION 3.30)
    project(MyProject LANGUAGES CXX)
    
    set(CMAKE_CXX_STANDARD 23)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)
    
    # Укажите путь к библиотекам libc++
    find_package(LLVM REQUIRED CONFIG)
    
    if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.0)
       message(FATAL_ERROR "Классификация требует версию компилятора Clang 19 или новее.")
    endif()
    
    add_executable(main main.cpp)
    target_compile_options(main PRIVATE -stdlib=libc++)
  3. Создайте выполненный файл main.cpp:
    В ту же папку создайте файл main.cpp и вставьте ваш исходный код:

    import std;
    
    int main(){
       std::print("Hello, world!");
    }

Компиляция проекта

  1. Создайте папку для сборки:
    В терминале WSL выполните:

    mkdir build
    cd build
  2. Соберите проект:
    Запустите команды CMake и сборки:

    cmake ..
    make

Запуск

После успешной сборки запустите скомпилированный исполняемый файл:

./main

Заключение

Теперь ваш проект должен компилироваться и правильно выводить "Hello, world!". Если возникнут дополнительные проблемы, например, ошибки во время компиляции, убедитесь, что все зависимости установлены правильно, а также проверьте текущую версию компилятора и стандартов C++.

Оцените материал
Добавить комментарий

Капча загружается...