{"id":32623803,"url":"https://github.com/cubiczebra/fcpp","last_synced_at":"2026-02-28T04:35:27.312Z","repository":{"id":306962509,"uuid":"1012028931","full_name":"CubicZebra/fcpp","owner":"CubicZebra","description":"A Modern System-level C/CPP Project Build Solution","archived":false,"fork":false,"pushed_at":"2025-09-12T09:56:39.000Z","size":479,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-30T20:01:00.315Z","etag":null,"topics":["build-system","cmake","conan2","configuration","cross-platform","depandency-management","documentation","doxygen","graphviz","gtest","modern-cpp","sphinx"],"latest_commit_sha":null,"homepage":"","language":"CMake","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CubicZebra.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-01T17:41:01.000Z","updated_at":"2025-09-12T09:56:43.000Z","dependencies_parsed_at":"2025-07-28T18:35:11.904Z","dependency_job_id":"0b776929-9307-480a-9641-0d7595eb5d6f","html_url":"https://github.com/CubicZebra/fcpp","commit_stats":null,"previous_names":["cubiczebra/fcpp"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/CubicZebra/fcpp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CubicZebra%2Ffcpp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CubicZebra%2Ffcpp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CubicZebra%2Ffcpp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CubicZebra%2Ffcpp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CubicZebra","download_url":"https://codeload.github.com/CubicZebra/fcpp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CubicZebra%2Ffcpp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29924756,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T19:37:42.220Z","status":"online","status_checked_at":"2026-02-28T02:00:07.010Z","response_time":90,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["build-system","cmake","conan2","configuration","cross-platform","depandency-management","documentation","doxygen","graphviz","gtest","modern-cpp","sphinx"],"created_at":"2025-10-30T19:58:13.879Z","updated_at":"2026-02-28T04:35:27.306Z","avatar_url":"https://github.com/CubicZebra.png","language":"CMake","funding_links":[],"categories":[],"sub_categories":[],"readme":"# A Modern C/CPP Library Build System\n\nThis project is a C/C++ library built using Conan 2, featuring modern C and C++ standard support and module \ncapabilities.\n\n## Badges\n\n![License](https://img.shields.io/github/license/CubicZebra/fcpp?color=blue\u0026label=license)\n![CodeFactor Grade](https://img.shields.io/codefactor/grade/github/CubicZebra/fcpp?label=code%20quality\u0026logo=codefactor)\n![C++](https://img.shields.io/badge/C%2B%2B-17%2F20%2F23-blue?logo=c%2B%2B\u0026logoColor=white)\n![Modules](https://img.shields.io/badge/modules-C%2B%2B23%20experimental-purple?logo=c%2B%2B\u0026logoColor=white)\n![CI](https://github.com/CubicZebra/fcpp/actions/workflows/ci-build-test.yml/badge.svg)\n![CI](https://github.com/CubicZebra/fcpp/actions/workflows/docs-build.yml/badge.svg)\n![CMake](https://img.shields.io/badge/cmake-3.28%2B-orange?logo=cmake)\n![Python](https://img.shields.io/badge/python-3.10%2B-blue?logo=python)\n![Doxygen](https://img.shields.io/badge/docs-Doxygen-green?logo=doxygen\u0026logoColor=white)\n![Sphinx](https://img.shields.io/badge/docs-Sphinx-blue?logo=readthedocs\u0026logoColor=white)\n\n## Project Overview\n\n- **Language**: C/C++\n- **Library Build System**: Python with Conan 2.0\n- **File Build System**: Doxygen, Graphviz, Sphinx\n- **Module Support**: Optionally activated, when C++ standard ≥ 23\n- **Component Structure**:\n    - pairwise header and source assumption\n    - suffix distinguishment, (.h, .c) for C part, and (.hpp, .cpp) for C++ part\n    - documenting system uses .dox for pure docstring, .cxx for examples codes\n\n## Features\n\n- Conan-based modern dependency management\n- Supports C++ standards 17, 20, and 23\n- Automatic module file generation (`.ixx`/`.cppm`) from headers/sources\n- Cross-platform compatibility (Windows, Linux, macOS)\n- Dual C and C++ interfaces with separate linkage targets\n- Doxygen annotation support for object exporting (`@exporter`, `@attacher`)\n- Automation documenting system via Doxygen and Sphinx\n- Importation, derivation and call relationship illustration through Graphviz\n\n## Build Requirements\n\n- Conan 2.0+\n- Compatible C/C++ compiler:\n    - GCC\n    - Clang\n    - MSVC\n- CMake\n\n## Documenting Requirements\n\n- Doxygen\n- Graphviz\n- sphinx\n- sphinx-intl\n- sphinx-rtd-theme\n\n## Test Requirements\n\n- GTest\n\n## Crash Course of Build\n\n### 1. Build then test your library\n\ninplace build and test\n\n```bash\nconan create . -s build_type=Debug --build=missing\n```\n\ncross-build to host device (assume toolchain and profile are ready):\n\n```bash\nconan create . -pr:b=default -pr:h=arm_profile -s build_type=Debug --build=missing -tf=\"\"\n```\n\n### 2. Build documentations\n\n```bash\npython ./docs/build.py\n```\n\n### 3. One-lined build automation \n\nUnix-like platforms (Linux, MacOS):\n\n```bash\nbash ./build\n```\n\nWindows:\n\n```powershell\nGet-Content \"build\" | Invoke-Expression\n```\n\n### 4. Add requirements\n\nAdd your required libraries in *conandata.yml* where dependency graph is automatically computed from, then \nmodify the **dependencies** field in *metadata.json* to config proper package names and associated targets to \nlink (no need modification on *CMakeLists.txt*).\n\nRequirements for your project can be the package archived on [Conan Center](https://conan.io/center), or user \nbuilt ones. If the later one, at least you need a locale Conan server for managing your libraries.\n\n## All-in-one Project Structure\n\n```\nproject-root/\n├── conanfile.py             # Conan recipe\n├── CMakeLists.txt           # CMake build framework\n├── metadata.json            # Project metadata configuration (name, version, etc)\n├── conandata.yml            # Dependency specifications, Conan plugin support\n├── LICENSE                  # Project license\n├── include/                 # Public headers\n│   ├── *.h                  # C interface headers\n│   └── *.hpp                # C++ interface headers\n├── src/                     # Implementation files\n│   ├── *.c                  # C sources\n│   ├── *.cpp                # C++ sources\n│   └── *.ixx/*.cppm         # Auto-generated Module files (in experimental)\n├── docs/                    # Documentations root\n│   ├── doxygen/             # Doxygen system main root\n│   │   ├── dox/             # Pure documentations' folder\n│   │   │   ├── demos/       # Examples catelogue\n│   │   │   │   ├── *.dox    # Documenting docstring\n│   │   │   │   └── *.cxx    # Example codes\n│   │   │   └── *.dox        # Main pages and etc\n│   │   └── ...\n│   ├── sphinx/              # Sphinx system main root\n│   │   ├── source/          # Source files of sphinx system\n│   │   ├── locales/         # Pot files for internalization\n│   │   └── ...\n│   └── images/              # Static images for doxygen/sphinx system\n└── test_pacakge/            # Test project\n    ├── export/              # Log for testing results\n    ├── stress/ \n    │   └── *.cpp            # Scripts for stress testing\n    ├── unit/\n    │   └── *.cpp            # Scripts for unit testing\n    ├── main.cpp             # Validation program for package\n    ├── conanfile.py         # Conan recipe for test_package\n    └── CMakeLists.txt       # CMake build workflow for test_package\n```\n\n## Module Generation (experimental)\n\nWhen `generate_modules_inplace` is enabled in `metadata.json`:\n\n1. Header/source pairs automatically generate module files\n2. `#include` directives are converted to `import` statements\n3. Doxygen annotations control symbol visibility:\n    - `@exporter`: Exports symbols in modules\n    - `@attacher`: Attaches symbols to modules\n\nThis feature is experimental now, however, the specific syntax can make the existing project a ease \nmigration to fit the future C++ standard.\n\n## Compiler Support Matrix\n\n| Feature          | MSVC | Clang | GCC | Apple-Clang |\n|------------------|------|-------|-----|-------------|\n| C++ Modules      | ✓    | ✓     | ✓   | ✓           |\n| C Compatibility  | ✓    | ✓     | ✓   | ✓           |\n| Automatic Export | ✓    | ✓     | ✓   | ✓           |\n\n## Platforms Support\n\n- **Desktop**: Windows, Linux, MacOS\n- **Mobile**: arm-linux, risc-v\n\n## To Do Things\n\nPossible frame design/validation on Apple Clang compiler (raised from dlib requirement).\n\n## License\n\n[Apache-2.0] - See included LICENSE file for details.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcubiczebra%2Ffcpp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcubiczebra%2Ffcpp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcubiczebra%2Ffcpp/lists"}