On 07/10/2010 06:54 PM, Paul Harris wrote: > On 9 July 2010 22:39, Michael Wild <them...@gmail.com> wrote: > >> >> On 9. Jul, 2010, at 15:48 , Michael Hertling wrote: >> >>> On 07/08/2010 09:47 AM, Paul Harris wrote: >>>> On 8 July 2010 15:31, Michael Wild <them...@gmail.com> wrote: >>>> >>>>> >>>>> On 8. Jul, 2010, at 7:25 , Paul Harris wrote: >>>>> >>>>>> On 8 July 2010 12:56, Michael Wild <them...@gmail.com> wrote: >>>>>> >>>>>>> >>>>>>> On 8. Jul, 2010, at 4:40 , Paul Harris wrote: >>>>>>> >>>>>>>> On 7 July 2010 23:05, Michael Wild <them...@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) >>> >>> Could you detect manually where the binary in question gets written >>> to, and post ctest's output with the complaint about not finding it, >>> and perhaps you could also post a minimal CMakeLists.txt file which >>> demonstrates this issue along with the output of "make VERBOSE=1"? >>> >>> Regards, >>> >>> Michael >> >> I suspect he's using a pre-2.8 version of CMake. I confirmed that add_test >> only resolves executable target names if used with NAME and COMMAND, and >> this signature was introduced in 2.8. >> >> > I'm using 2.8.1 > Michael Hertling - do you still want me to follow up as you asked?
Yes, of course, if the problem still persists. Until now, I haven't managed to let CTest miss an executable previously built by CMake, i.e. ADD_TEST(NAME ... COMMAND ...) always worked well for me. Regards, Michael _______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake