Live data from Hacker News

Show HN: Modern C++ Build Tools for Module Feature

github.com

1–5 of 5 posts

Re: Show HN: Modern C++ Build Tools for Module Feature

#4

> mcpp.toml ← project manifest It's a fatal flaw. A declarative language isn't powerful enough to be able to describe complexity of typical C++ project. That's why cmake language (Turing-complete) exists.

Design Idea: Simple is better. Easy is better. (complexity shoude be gradual for devolper)

mcpp use `mcpp.toml + build.mcpp` model to describe a project (like cargo/zig)

- 90+% project -> mcpp.toml

- other complex project -> mcpp.toml + build.mcpp (C++ / Turing-complete)

so mcpp target is manage toolchain/package and easy to new / build / run / describe for project.

C++23/26 is simply, but run a helloworld(by `import std`) program is difficult. mcpp can do it. dont need to config any, dont need to know compiler what is. focus on program itself

```

mcpp new hello && cd hello && mcpp run

```

of course, it can also use `mcpp toolchain list` to choose gcc/llvm/msvc/mingw

Example: mcpp already support complex projects - opencv / grpc / ffmpeg

```

mcpp new mygrpc_demo --template grpc:greeter && cd mygrpc_demo && mcpp run

```

https://github.com/mcpplibs/grpc-m // use build.mcpp to codegen

(Test on Ubuntu 24 / default gcc 16 by mcpp auto-install)

However, it must be acknowledged that `mcpp` is an early-stage project, and you may encounter some issues (include library ecosystem) ,feel free reply or create issue or talk with me.

Re: Show HN: Modern C++ Build Tools for Module Feature

#5

> mcpp.toml ← project manifest It's a fatal flaw. A declarative language isn't powerful enough to be able to describe complexity of typical C++ project. That's why cmake language (Turing-complete) exists.

What sort of C++ project requires general recursion to describe its build process? I could imagine a compile step not terminating - due to some crazy template meta-programming glitch but the build system itself? The output of a compile or link operation (or preprocess or source generation step) has a distinctly different type to that of its input - so I don’t see how a potentially infinite chain of build operations can be constructed from these build steps?