zxing/cpp/README.md
smparkes@smparkes.net 12222ad493 Merge schulzch VS support and other cleanup
git-svn-id: https://zxing.googlecode.com/svn/trunk@2654 59b500cc-1b3d-0410-9834-0bbf25fbcc57
2013-04-14 23:32:38 +00:00

1.9 KiB

ZXing C++ Port

This is a manual port of ZXing to C++. It has been tested on Linux, Mac OS X and Windows.

Building using SCons

SCons is a build tool written in Python. You'll need to have Python installed, but scons installation is optional: a run time copy of SCons (called scons-local) is included. To use the included copy, replace scons with python scons/scons.py in the instructions below.

To build the library only:

  1. Install libiconv (optional; included in many operating systems)
  2. cd to the cpp folder
  3. Run scons lib

To build the command line utility utility:

  1. Run scons zxing
  2. Run build/zxing for a command line reference

To build the unit tests (optional):

  1. Install CppUnit (libcppunit-dev on Ubuntu)
  2. Run scons tests
  3. Run build/testrunner

To clean:

  1. Run scons -c all

Building using CMake

CMake is a tool, that generates native makefiles and workspaces. It integrates well with a number of IDEs including Qt Creator and Visual Studio.

Usage with Qt Creator:

  1. Open CMakeLists.txt as new project
  2. Specify command line arguments (see below) and press Finish

Usage with Makefiles, Visual Studio, etc. (see cmake --help for a complete list of generators):

  1. cd to cpp/build
  2. Unix: run cmake -G "Unix Makefiles" ..
  3. Windows: run cmake -G "Visual Studio 10" ..

You can switch between build modes by specifying:

  • -DCMAKE_BUILD_TYPE=Debug or
  • -DCMAKE_BUILD_TYPE=Release

Development tips

To profile the code (very useful to optimize the code):

  1. Install Valgrind
  2. Run valgrind --tool=callgrind build/zxing - path/to/test/data/*.jpg > report.html
  3. Analyze output using KCachegrind

To run the black box tests and check for changes:

  1. Build zxing-img, e.g., scons zxing
  2. Run the tests: bash blackboxtest.sh 2>&1 | tee bb.results
  3. Diff them with the known results: diff bb.results blackboxtest.results