Awesome
What is this?
This is an example setup of Travis-CI with cmake and google test. I finally got all three working together nicely with the help of dmonopoly's cmake and gtest example. Hopefully it'll help someone get set up with cmake and google test on travis-ci.
Where are things?
build/
is where code is built - like where executables are.
ext/
includes googletest framework (git submodule)
inlcude/
is where the header files are located (here: project1.h)
src/
is where the source files are located (here: project1.cpp, main.cpp)
test/
is where the test source files are located (here: test_project1.cpp)
Rest of code in root:
-CMakeLists.txt
must be in each subdirectory of the project
What do I do?
Use it on Travis-CI:
Please look at the travis.yml file to see the setup of travis. As the gtest library is located within your project. The procedure on Travis is quite simple. Note that I used a more recent version of cmake
as provided in the ubuntu precise
repositories. This is needed for the relatively recent command REMOVE_ITEM
to exclude the main.cpp
from the source file list as I am lazy and did not want to write out the files by name.
Use it locally:
If you want to test it all out through the common gtest procedure, first delete build/ (if present). Then...
In the project root:
mkdir build
cd build
cmake ..
By now Makefiles should be created. Then, to build executables and do all that linking stuff,
make
To prepare all your tests, run this:
cmake -DBUILD_TESTS=ON ..
To run all tests easily,
make test
Note: cmake -DBUILD_TESTS=ON
turns on the variable 'BUILD_TESTS', which is specified in the root
CMakeLists.txt file. This is handy if you want to build in certain ways. Clear
description
here.
Run executables
Then you can do ./myexecutable for the generated executable, e.g.:
./project1
and if you did cmake with BUILD_TESTS=ON:
./runUnitTests
Acknowledgement and further details
This repository is based on the works of David Y. Zhang in this repository. He spent a lot of time figuring out all the details for cmake and gtest. Please refer to his repository README for more detail on his approach.