Date: Tue, 12 Dec 2023 17:56:33 +0200
Olga Arkhipova <olgaark_at_[hidden]> writes:
> The tool invokes the compiler to scan the sources, constructs the
> dependency graph and builds all given c++ sources and header units.
I am convinced such a tool will sooner rather than later contain
a substantial chunk of a real-world build system.
Take the `import std;` support as an example. I have it implemented
in build2 for MSVC and Clang/libc++. Here are the extras I needed to
do that:
1. Detect the compiler id and version (to check the requested
functionality is available).
2. Detect the standard library being used (to detect libc++).
3. Detect the header search paths used by the compiler (to find the std
module for MSVC).
4. Detect the standard library variant being linked (-static-libstdc++,
/MT[d] or /MD[d]) in order to build the corresponding BMI.
5. Unless the plan is to rebuilt the std module on every invocation (and
endure several second compilation times for hello-world programs),
extract headers (/M*, /showIncludes) and track changes since the
std modules for both implementations include headers.
> The tool invokes the compiler to scan the sources, constructs the
> dependency graph and builds all given c++ sources and header units.
I am convinced such a tool will sooner rather than later contain
a substantial chunk of a real-world build system.
Take the `import std;` support as an example. I have it implemented
in build2 for MSVC and Clang/libc++. Here are the extras I needed to
do that:
1. Detect the compiler id and version (to check the requested
functionality is available).
2. Detect the standard library being used (to detect libc++).
3. Detect the header search paths used by the compiler (to find the std
module for MSVC).
4. Detect the standard library variant being linked (-static-libstdc++,
/MT[d] or /MD[d]) in order to build the corresponding BMI.
5. Unless the plan is to rebuilt the std module on every invocation (and
endure several second compilation times for hello-world programs),
extract headers (/M*, /showIncludes) and track changes since the
std modules for both implementations include headers.
Received on 2023-12-12 15:56:27