[CMake] test depending on code compilation
Franck Houssen
franck.houssen at inria.fr
Fri Jan 12 04:36:49 EST 2018
----- Mail original -----
> De: "Mario Werner" <mario.werner at iaik.tugraz.at>
> À: cmake at cmake.org
> Envoyé: Vendredi 12 Janvier 2018 09:38:50
> Objet: Re: [CMake] test depending on code compilation
>
> On 2018-01-11 18:03, Franck Houssen wrote:
> >
> >
> > ----- Mail original -----
> >> De: "Mario Werner" <mario.werner at iaik.tugraz.at>
> >> À: cmake at cmake.org
> >> Envoyé: Jeudi 11 Janvier 2018 16:27:18
> >> Objet: Re: [CMake] test depending on code compilation
> >>
> > [snip]
> >
> >>> 2) Also the verbosity is broken with check : make test ARGS="-V" is
> >>> verbose , but, make check ARGS="-V" is not.
> >>> => how to deal with that ?
> >>>
> >>>
> >>
> >> Can't help you there. I usually simply use `make check` to build and run
> >> the full test suite in order to get an overview. Afterwards, I directly
> >> call `ctest` with the desired arguments, for example when triaging a bug.
> >>
> >
> > In travis a make check ARGS="-V" could be convenient to see output of tests
> > while they run (understand what is wrong when if it fails - you can't get
> > files from travis).
> > Anyway, that not so blocking.
> >
>
> Right, I usually have two custom targets in my projects to deal with
> that in a generic way. Namely, "suite" for building the tests and
> "check" for building+running the tests.
>
> Developers can then use "make check" as usual to build and run the tests
> without providing any arguments to ctest. On the other hand, the CI
> system can build using the "suite" target and execute ctest directly
> like in the following example. (Of course developers can do the same if
> needed)
>
> ```
>
> - mkdir _build
> - cd _build
> - cmake -DCMAKE_BUILD_TYPE=Release ..
> - cmake --build . --target suite -- -j2
> - ctest -V
>
> ```
>
> I use the following helper macro to generate the needed boilerplate
> code. Usage is then as simple as calling `add_to_suite` for every target.
>
> ```
>
> macro(add_to_suite target)
> # add suite target which is used as meta target for building the tests
> if(NOT TARGET "suite")
> add_custom_target("suite")
> endif()
>
> # add check command which calls ctest
> # it additionally depends on the suite target to build the test cases
> if(NOT TARGET "check")
> add_custom_target("check" COMMAND ${CMAKE_CTEST_COMMAND}
> WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
> COMMENT "Executing test suite.")
> add_dependencies("check" "suite")
> endif()
>
> add_dependencies("suite" ${target})
> endmacro()
>
> # usage example (repeat for any number of tests you have
> add_executable(testexe EXCLUDE_FROM_ALL ${test_source_files})
> target_link_libraries(testexe ${link_dependencies})
> add_to_suite(testexe)
>
OK, I see. I'll try that way. Thanks
> ```
>
> Note that, instead of specifying EXCLUDE_FROM_ALL on every
> add_executable, I usually have all my tests in one directory and specify
> EXCLUDE_FROM_ALL on the add_subdirectory call.
>
> --
>
> Powered by www.kitware.com
>
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
>
> Kitware offers various services to support the CMake community. For more
> information on each offering, please visit:
>
> CMake Support: http://cmake.org/cmake/help/support.html
> CMake Consulting: http://cmake.org/cmake/help/consulting.html
> CMake Training Courses: http://cmake.org/cmake/help/training.html
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> https://cmake.org/mailman/listinfo/cmake
>
More information about the CMake
mailing list