mirror of
https://github.com/ArthurSonzogni/FTXUI.git
synced 2025-11-15 11:38:56 +08:00
Follow-up to #1015. This pull request replaces the full modules that represent headers, with partitions, to emphasise the belonging of the header to the module. This should hopefully provide a speedup to compilation, and confuse users less by aggregating the usable modules into a smaller set.
79 lines
2.0 KiB
Markdown
79 lines
2.0 KiB
Markdown
@page cpp20-modules C++20 Modules
|
|
|
|
|
|
> [!WARNING]
|
|
> This feature is still in development, and the API may change in future releases.
|
|
> Your contribution is needed to help us improve the compatibility and usability
|
|
> of C++ modules in FTXUI. If you encounter any issues or have suggestions,
|
|
> please open an issue.
|
|
|
|
FTXUI experimentally supports
|
|
[C++20 modules](https://en.cppreference.com/w/cpp/language/modules) to reduce
|
|
compilation times and improve code organization. Each part of the library has a
|
|
corresponding module, split into partitions per each header.
|
|
|
|
Use the FTXUI_BUILD_MODULES option to build the FTXUI project itself to provide C++20 modules,
|
|
for example with CMake and Ninja:
|
|
|
|
```sh
|
|
cmake \
|
|
-DCMAKE_GENERATOR=Ninja \
|
|
-DFTXUI_BUILD_MODULES=ON \
|
|
..
|
|
|
|
ninja
|
|
```
|
|
|
|
> [!NOTE]
|
|
> To use modules, you need a C++≥20 compatible compiler, CMake version 3.20 or
|
|
> higher, and use a compatible generator like Ninja. Note that Makefile
|
|
> generators **do not support modules**.
|
|
|
|
Then, in your own code you can consume the modules and code as normal:
|
|
|
|
```cpp
|
|
import ftxui;
|
|
|
|
using ftxui::Button;
|
|
using ftxui::ScreenInteractive;
|
|
|
|
int main() {
|
|
auto screen = ScreenInteractive::TerminalOutput();
|
|
auto button = Button("Click me", screen.QuitClosure());
|
|
screen.Loop(button);
|
|
return 0;
|
|
}
|
|
```
|
|
|
|
Note, the `ftxui` convenience module which simply pulls together all the modules:
|
|
|
|
```cpp
|
|
export import ftxui.component;
|
|
export import ftxui.dom;
|
|
export import ftxui.screen;
|
|
export import ftxui.util;
|
|
```
|
|
You can instead import only the module(s) you need if desired.
|
|
|
|
To properly find and link the modules with CMake, use `target_link_libraries` to get the right
|
|
compiler, linker, etc. flags.
|
|
|
|
```cmake
|
|
target_link_libraries(my_executable
|
|
#...whatever...
|
|
PRIVATE ftxui::modules
|
|
)
|
|
```
|
|
|
|
### Module list
|
|
|
|
The modules directly reference the corresponding header, or a group of related
|
|
headers to provide a more convenient interface. The following modules
|
|
are available:
|
|
|
|
- `ftxui`
|
|
- `ftxui.component`
|
|
- `ftxui.dom`
|
|
- `ftxui.screen`
|
|
- `ftxui.util`
|