# Minimal C++ build example This directory showcases a minimal build of Arrow C++ (in `build_arrow.sh`). This minimal build is then used by an example third-party C++ project using CMake logic to compile and link against the Arrow C++ library (in `build_example.sh` and `CMakeLists.txt`). When run, the example executable reads a file named `test.csv`, displays its parsed contents, and then saves them in Arrow IPC format in a file named `test.arrow`. ## Running the example You can run this simple example using [Docker Compose][docker-compose] and the given `docker-compose.yml` and dockerfiles, which installs a minimal Ubuntu image with a basic C++ toolchain. Just open a terminal in this directory and run the following commands: ```bash docker-compose run --rm minimal ``` Note that this example mounts two volumes inside the Docker image: * `/arrow` points to the Arrow source tree * `/io` points to this example directory ## Statically-linked builds We've provided an example build configuration here with CMake to show how to create a statically-linked executable with bundled dependencies. To run it on Linux, you can use the above Docker image: ```bash docker-compose run --rm static ``` On macOS, you can use the `run_static.sh` but you must set some environment variables to point the script to your Arrow checkout, for example: ```bash export ARROW_DIR=path/to/arrow-clone export EXAMPLE_DIR=$ARROW_DIR/cpp/examples/minimal_build export ARROW_BUILD_DIR=$(pwd)/arrow-build export EXAMPLE_BUILD_DIR=$(pwd)/example ./run_static.sh ``` On Windows, you can run `run_static.bat` from the command prompt with Visual Studio's command line tools enabled and CMake and ninja build in the path: ``` call run_static.bat ``` ### Static linking against system libraries You can also use static libraries of Arrow's dependencies from the system. To run this configuration, set `ARROW_DEPENDENCY_SOURCE=SYSTEM` for `run_static.sh`. You can use `docker-compose` for this too: ```bash docker-compose run --rm static-system-dependency ``` [docker-compose]: https://docs.docker.com/compose/