[CMake] building tests

Paul Harris harris.pc at gmail.com
Thu Jul 8 03:47:14 EDT 2010


On 8 July 2010 15:31, Michael Wild <themiwi at gmail.com> wrote:

>
> On 8. Jul, 2010, at 7:25 , Paul Harris wrote:
>
> > On 8 July 2010 12:56, Michael Wild <themiwi at gmail.com> wrote:
> >
> >>
> >> On 8. Jul, 2010, at 4:40 , Paul Harris wrote:
> >>
> >>> On 7 July 2010 23:05, Michael Wild <themiwi at gmail.com> wrote:
> >>>
> >>>>
> >>>> On 7. Jul, 2010, at 16:01 , Paul Harris wrote:
> >>>>
> >>>>> Hi all,
> >>>>>
> >>>>> I have looked and can't find the answer, so I turn to the list.
> >>>>>
> >>>>> I have a CMakeLists.txt and a subdirectory called utils, which also
> has
> >>>> its
> >>>>> own CMakeLists.txt
> >>>>>
> >>>>> In the parent CML.txt, I have something like:
> >>>>>
> >>>>> ENABLE_TESTING()
> >>>>> add_subdirectory(utils)
> >>>>>
> >>>>> In my utils CML.txt, I have
> >>>>>
> >>>>> ADD_EXECUTABLE(unit_1 units/unit_1.cpp)
> >>>>> ADD_TEST( unit_1 ${EXECUTABLE_OUTPUT_PATH}/unit_1 )
> >>>>>
> >>>>
> >>>> Simplify this to
> >>>>
> >>>> ADD_TEST(unit_1 unit_1)
> >>>>
> >>>> CMake will figure out by itself that unit_1 is a target and invoke the
> >>>> executable correctly (your code would break for multi-configuration
> IDE
> >>>> generators).
> >>>>
> >>>>
> >>> This does not work for me.  If I do not have the EXECUTABLE_OUTPUT_PATH
> >> in
> >>> add_test, I get a message like this when i run "make test" (shortened
> for
> >>> brevity):
> >>>
> >>> 1/  1 Testing unit_string_numeric_utils     Could not find executable
> >>> unit_string_numeric_utils
> >>> Looked in the following places:
> >>> unit_string_numeric_utils
> >>> unit_string_numeric_utils
> >>> Release/unit_string_numeric_utils
> >>> Release/unit_string_numeric_utils
> >>
> >> Mmmh, works fine for me:
> >>
> >> --------->8---------
> >> cmake_minimum_required(VERSION 2.8)
> >> project(tmp)
> >>
> >> enable_testing()
> >>
> >> add_executable(unit1 unit1.cpp)
> >> add_test(unit1 unit1)
> >> ---------<8---------
> >>
> >> Where unit1.cpp is just a simple hello-world program. Running it:
> >>
> >>
> > snip
> >
> > My project is a lot bigger than a hello-world program.  It has
> > subdirectories for a start, and I do things like
> >  SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin CACHE INTERNAL
> "Single
> > output directory for building all executables.")
> >
> > I'm not sure at which point things stop working, do you want me to try
> and
> > build a test-case?
>
> You are right, it seems that the documentation is misleading (or IMHO
> outright wrong). This, however, works for me and is safe:
>
> add_test(NAME unit1 COMMAND $<TARGET_FILE:unit1>)
>
> Note that NAME and COMMAND are required for this to work.
>
> BTW: EXECUTABLE_OUTPUT_PATH is deprecated, you should use
> CMAKE_RUNTIME_OUTPUT_DIRECTORY instead.
>
>
I changed EXE to that CMAKE RUNTIME thing, thanks.

That NAME/COMMAND thing doesn't work for me at all.  Can't find the binary
without the runtime output path explicitly added.

This is what I tried:

In parent CMakeLists.txt

ENABLE_TESTING()

set (CMAKE_TEST_COMMAND ctest -V)

function (add_unit_test name)
   if(NOT TARGET ${name})
      add_custom_target (check COMMAND ${CMAKE_TEST_COMMAND})
   endif()
   add_executable(${name} ${ARGN})
   add_test(NAME ${name} COMMAND $<TARGET_FILE:${name}>)
   add_dependencies(check ${name})
endfunction()


in subdirectory CMakeLists.txt
add_unit_test(unit_string_numeric_utils units/unit_string_numeric_utils.cpp
string_numeric_utils.cpp)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20100708/4fb07f37/attachment.htm>


More information about the CMake mailing list