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,
To prepare all your tests, run this:
cmake -DBUILD_TESTS=ON ..
To run all tests easily,
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.
Then you can do ./myexecutable for the generated executable, e.g.:
and if you did cmake with BUILD_TESTS=ON:
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.