namespace cpp {}

C++ lernen, kennen, anwenden

Benutzer-Werkzeuge

Webseiten-Werkzeuge


howto:module_std_gcc15

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
howto:module_std_gcc15 [2025-04-25 16:36] – [CMake] rrichterhowto:module_std_gcc15 [2026-04-09 16:48] (aktuell) rrichter
Zeile 1: Zeile 1:
 ====== How to use C++ module std in GNU g++-15 ====== ====== How to use C++ module std in GNU g++-15 ======
  
-Modules with g++15, CMake and Ninja under Windows 10. WarningThis is experimental. +Follow this advice: https://github.com/JRASoftware/cpp23-import-std-guide
- +
-A small demo project. Available on [[https://github.com/rene-richter/cpp_module_std_cmake_gcc15HEAD|Github]]. +
- +
-How to build and execute: +
- +
-<code> +
-cd build +
-cmake -G Ninja +
-ninja +
-demo +
-</code> +
-Prerequisites: +
- +
-  * GCC 15.1 (just released!) or GCC 16 HEAD +
-  * CMake 3.31.3 +
-  * Ninja 1.12.1 +
- +
-Limitations (at the time of writing, 2025-04-25): +
- +
-  * CMake supports C++ modules for Ninja generator only +
-  * CMake tells Ninja nothing about module std. (I wasn't able to get[[https://www.kitware.com/import-std-in-cmake-3-30/|Kitware's "import std" recipe]] running.) Hack: extra library ''%%module_std%%'' in ''%%CMakeList.txt%%''+
-  * Some features like ''std::print()'' or ''std:stacktrace'' are in GCC's experimental library ''stdc++exp''+
- +
-==== CMake ==== +
- +
-<code> +
-cmake_minimum_required(VERSION 3.31) +
- +
-project( +
-    compile_with_module_std +
-    VERSION 0.0.1 +
-    LANGUAGES CXX) +
- +
-# hack #1: temporary hack for GCC g++16.0 HEAD https://www.equation.com gcc-15-20250420-64.exe +
-# to remove when g++ & CMake know about module std +
-add_library(module_std) +
- +
-target_sources(module_std +
-    PUBLIC +
-        FILE_SET CXX_MODULES FILES +
-            gnu/std.cc # copied from MinGW\include\c++\16.0.0\bits\std.cc +
-+
-target_compile_features(module_std PUBLIC cxx_std_26) +
-# also to remove (see below): +
-# target_link_libraries(...XYZ... PRIVATE module_std) +
- +
-# hack #2: advanced features like std::print(), std::stacktrace, etc in g++14, g++15, and g++16 HEAD: +
-# target_link_libraries(...XYZ... PRIVATE stdc++exp) +
- +
-add_library(my_module) +
- +
-target_sources(my_module +
-    PUBLIC +
-        FILE_SET CXX_MODULES FILES +
-            src/my_module.cpp  +
-+
-target_compile_features(my_module PUBLIC cxx_std_26) +
-target_link_libraries(my_module PRIVATE module_std) # hack #1 +
- +
-add_executable(demo src/demo.cpp) +
-target_compile_features(demo PUBLIC cxx_std_26) +
-target_link_libraries(demo PRIVATE my_module) +
-target_link_libraries(demo PRIVATE module_std) # hack #1 +
-target_link_libraries(demo PRIVATE stdc++exp)  # hack #2 +
- +
-</code> +
-==== C++ code ==== +
- +
-Modular ''%%src/my_module.cpp%%'' +
- +
-<code cpp> +
-export module my_first_module; +
-import std; +
- +
-export namespace something +
-+
- +
-std::string hello(std::string name) +
-+
-    return "Hello, " + name + '!'; +
-}    +
- +
-} // end namespace something +
-</code> +
-used in ''%%demo.cpp%%'': +
- +
-<code cpp> +
-import std; +
-import my_first_module; +
- +
-int main() +
-+
-    std::println("{}", something::hello("modules")); +
-+
-</code>+
  
howto/module_std_gcc15.1745591814.txt.gz · Zuletzt geändert: von rrichter

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki