Skip to main content

logo

Build Status PyPI

Quom

Quom is a single file generator for C/C++.

It resolves all included local headers starting with your main C/C++ file. This is also known as amalgamation.

Afterwards, it tries to find the related source files and their headers and places them at the end of the main file or at a specific stitch location if provided.

At the end there will be one single file with all your header and sources joined together.

Installation

pip install --user quom

Requires Python 3.7 or later.

How to use it

usage: quom [-h] [--stitch format] [--include_guard format] [--trim]
            input output

Single header generator for C/C++ libraries.

positional arguments:
  input                 Input file path of the main file.
  output                Output file path of the generated single header file.

optional arguments:
  -h, --help            show this help message and exit
  --stitch format, -s format
                        Format of the comment where the source files should be placed
                        (e.g. // ~> stitch <~). Default: None (at the end of the main file)
  --include_guard format, -g format
                        Regex format of the include guard. Default: None
  --trim, -t            Reduce continuous line breaks to one. Default: True
  --include_directory INCLUDE_DIRECTORY, -I INCLUDE_DIRECTORY
                        Add include directories for header files.
  --source_directory SOURCE_DIRECTORY, -S SOURCE_DIRECTORY
                        Set the source directories for source files.
                        Use ./ in front of a path to mark as relative to the header file.
  --encoding ENCODING, -e ENCODING
                        The encoding used to read and write all files.

Simple example

The project:

|-src/
|  |-foo.hpp
|  |-foo.cpp
|   -main.cpp
|-out/
    -main_gen.cpp

foo.hpp

#pragma once

int foo();

foo.cpp

#include "foo.hpp"

int foo() {
    return 0;
}

main.cpp

#include "foo.hpp"

int main() {
    return foo();
}

The command:

quom src/main.hpp main_gen.cpp

main_gen.cpp

int foo();

int main() {
    return foo();
}

int foo() {
    return 0;
}

Advanced example

The project:

|-src/
|  |-foo.hpp
|  |-foo.cpp
|   -foobar.hpp
|-out/
    -foobar_gen.hpp

foo.hpp

#pragma once

#ifndef FOOBAR_FOO_HPP
#define FOOBAR_FOO_HPP

extern int foo; 

#endif

foo.cpp

#include "foo.hpp"

int foo = 42;

foobar.hpp

#pragma once

#ifndef FOOBAR_HPP
#define FOOBAR_HPP

#include "foo.hpp"

#endif

#ifdef FOO_MAIN

// ~> stitch <~

#endif

The command:

quom src/foobar.hpp foobar_gen.hpp -s "~> stitch <~" -g FOOBAR_.+_HPP

foobar_gen.hpp

#pragma once

#ifndef FOOBAR_HPP
#define FOOBAR_HPP

extern int foo;

#endif

#ifdef FOO_MAIN

int foo = 42;

#endif

Take a look into the examples folder for more.

Metadata

Release files for quom 4.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for quom 4.0.2
File Size Uploaded
quom-4.0.2.tar.gz 502.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for quom 4.0.2
File Interpreter ABI Platform
quom-4.0.2-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 517.5 kB

Release files / quom-4.0.2.tar.gz

Download URL quom-4.0.2.tar.gz
Size 502.7 kB
Tags Source
SHA-256 checksum
How to use checksums
db96f350076ee45f9df251e9ff807be3fd19971e08dc5bdf720f39ce5862f593
BLAKE2b-256 checksum
How to use checksums
4ee8abd145fff7ca9ae32383fa3fe2c8488778fc5e55aa382f21870fa5758979
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.18

Release files / quom-4.0.2-py2.py3-none-any.whl

Download URL quom-4.0.2-py2.py3-none-any.whl
Size 14.8 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
5976053f357099d7a78e8ab5036eee3a06e092284488cfaf8972ab4491542593
BLAKE2b-256 checksum
How to use checksums
eac7bbf7f4622f29dc9c3d165985be4cbde43ecd36036af550c9793880a841db
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.18

Release history Release notifications | RSS feed

This release

4.0.2 This release

2 release files

4.0.1

2 release files

4.0.0

2 release files

3.0.0

2 release files

2.0.0

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.3.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page