----- Mail original ----- > De: "Mario Werner" <mario.wer...@iaik.tugraz.at> > À: cmake@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.wer...@iaik.tugraz.at> > >> À: cmake@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 > -- 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