howto:module_std_gcc15
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
howto:module_std_gcc15 [2025-03-08 16:34] – rrichter | howto:module_std_gcc15 [2025-04-27 09:33] (aktuell) – [How to use C++ module std in GNU g++-15] 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 HEAD, CMake and Ninja under Windows 10. Warning: This is experimental. | + | Modules with g++15, CMake and Ninja under Windows 10. Warning: This is experimental. |
A small demo project. Available on [[https:// | A small demo project. Available on [[https:// | ||
Zeile 15: | Zeile 15: | ||
Prerequisites: | Prerequisites: | ||
- | * GCC 15 HEAD https:// | + | * g++ 15.1 (just released!) or [[https:// |
* CMake 3.31.3 | * CMake 3.31.3 | ||
* Ninja 1.12.1 | * Ninja 1.12.1 | ||
- | Limitations (at the time of writing, 2025-02-21): | + | Limitations (at the time of writing, 2025-04-25): |
* CMake supports C++ modules for Ninja generator only | * CMake supports C++ modules for Ninja generator only | ||
- | * CMake tells Ninja nothing about module std. Hack: extra library '' | + | * CMake tells Ninja nothing about module std. (I wasn't able to get[[https:// |
- | + | | |
- | Some lines in source file '' | + | |
- | + | ||
- | <code cpp> | + | |
- | // using std:: | + | |
- | // using std:: | + | |
- | // using std:: | + | |
- | // using std:: | + | |
- | // using std:: | + | |
- | </ | + | |
- | Sadly, newer weekly build compiler | + | |
==== CMake ==== | ==== CMake ==== | ||
Zeile 45: | Zeile 35: | ||
LANGUAGES CXX) | LANGUAGES CXX) | ||
- | # temporary hack for GCC g++15.0 HEAD https:// | + | # hack #1: temporary hack for GCC g++16.0 HEAD https:// |
# to remove when g++ & CMake know about module std | # to remove when g++ & CMake know about module std | ||
add_library(module_std) | add_library(module_std) | ||
Zeile 52: | Zeile 42: | ||
PUBLIC | PUBLIC | ||
FILE_SET CXX_MODULES FILES | FILE_SET CXX_MODULES FILES | ||
- | gnu/std.cc # modified | + | gnu/std.cc # copied |
) | ) | ||
target_compile_features(module_std PUBLIC cxx_std_26) | target_compile_features(module_std PUBLIC cxx_std_26) | ||
Zeile 58: | Zeile 48: | ||
# target_link_libraries(...XYZ... PRIVATE module_std) | # target_link_libraries(...XYZ... PRIVATE module_std) | ||
- | # another | + | # hack #2: advanced features like std:: |
# target_link_libraries(...XYZ... PRIVATE stdc++exp) | # target_link_libraries(...XYZ... PRIVATE stdc++exp) | ||
Zeile 69: | Zeile 59: | ||
) | ) | ||
target_compile_features(my_module PUBLIC cxx_std_26) | target_compile_features(my_module PUBLIC cxx_std_26) | ||
- | target_link_libraries(my_module PRIVATE module_std) | + | target_link_libraries(my_module PRIVATE module_std) |
add_executable(demo src/ | add_executable(demo src/ | ||
target_compile_features(demo PUBLIC cxx_std_26) | target_compile_features(demo PUBLIC cxx_std_26) | ||
- | target_link_libraries(demo PRIVATE module_std) | ||
target_link_libraries(demo PRIVATE my_module) | target_link_libraries(demo PRIVATE my_module) | ||
- | target_link_libraries(demo PRIVATE stdc++exp) | + | target_link_libraries(demo PRIVATE module_std) # hack #1 |
+ | target_link_libraries(demo PRIVATE stdc++exp) | ||
</ | </ |
howto/module_std_gcc15.1741448074.txt.gz · Zuletzt geändert: 2025-03-08 16:34 von rrichter