<br><br><div class="gmail_quote">On 8 July 2010 15:31, Michael Wild <span dir="ltr"><<a href="mailto:themiwi@gmail.com">themiwi@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><div></div><div class="h5"><br>
On 8. Jul, 2010, at 7:25 , Paul Harris wrote:<br>
<br>
> On 8 July 2010 12:56, Michael Wild <<a href="mailto:themiwi@gmail.com">themiwi@gmail.com</a>> wrote:<br>
><br>
>><br>
>> On 8. Jul, 2010, at 4:40 , Paul Harris wrote:<br>
>><br>
>>> On 7 July 2010 23:05, Michael Wild <<a href="mailto:themiwi@gmail.com">themiwi@gmail.com</a>> wrote:<br>
>>><br>
>>>><br>
>>>> On 7. Jul, 2010, at 16:01 , Paul Harris wrote:<br>
>>>><br>
>>>>> Hi all,<br>
>>>>><br>
>>>>> I have looked and can't find the answer, so I turn to the list.<br>
>>>>><br>
>>>>> I have a CMakeLists.txt and a subdirectory called utils, which also has<br>
>>>> its<br>
>>>>> own CMakeLists.txt<br>
>>>>><br>
>>>>> In the parent CML.txt, I have something like:<br>
>>>>><br>
>>>>> ENABLE_TESTING()<br>
>>>>> add_subdirectory(utils)<br>
>>>>><br>
>>>>> In my utils CML.txt, I have<br>
>>>>><br>
>>>>> ADD_EXECUTABLE(unit_1 units/unit_1.cpp)<br>
>>>>> ADD_TEST( unit_1 ${EXECUTABLE_OUTPUT_PATH}/unit_1 )<br>
>>>>><br>
>>>><br>
>>>> Simplify this to<br>
>>>><br>
>>>> ADD_TEST(unit_1 unit_1)<br>
>>>><br>
>>>> CMake will figure out by itself that unit_1 is a target and invoke the<br>
>>>> executable correctly (your code would break for multi-configuration IDE<br>
>>>> generators).<br>
>>>><br>
>>>><br>
>>> This does not work for me. If I do not have the EXECUTABLE_OUTPUT_PATH<br>
>> in<br>
>>> add_test, I get a message like this when i run "make test" (shortened for<br>
>>> brevity):<br>
>>><br>
>>> 1/ 1 Testing unit_string_numeric_utils Could not find executable<br>
>>> unit_string_numeric_utils<br>
>>> Looked in the following places:<br>
>>> unit_string_numeric_utils<br>
>>> unit_string_numeric_utils<br>
>>> Release/unit_string_numeric_utils<br>
>>> Release/unit_string_numeric_utils<br>
>><br>
>> Mmmh, works fine for me:<br>
>><br>
>> --------->8---------<br>
>> cmake_minimum_required(VERSION 2.8)<br>
>> project(tmp)<br>
>><br>
>> enable_testing()<br>
>><br>
>> add_executable(unit1 unit1.cpp)<br>
>> add_test(unit1 unit1)<br>
>> ---------<8---------<br>
>><br>
>> Where unit1.cpp is just a simple hello-world program. Running it:<br>
>><br>
>><br>
> snip<br>
><br>
> My project is a lot bigger than a hello-world program. It has<br>
> subdirectories for a start, and I do things like<br>
> SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin CACHE INTERNAL "Single<br>
> output directory for building all executables.")<br>
><br>
> I'm not sure at which point things stop working, do you want me to try and<br>
> build a test-case?<br>
<br>
</div></div>You are right, it seems that the documentation is misleading (or IMHO outright wrong). This, however, works for me and is safe:<br>
<br>
add_test(NAME unit1 COMMAND $<TARGET_FILE:unit1>)<br>
<br>
Note that NAME and COMMAND are required for this to work.<br>
<br>
BTW: EXECUTABLE_OUTPUT_PATH is deprecated, you should use CMAKE_RUNTIME_OUTPUT_DIRECTORY instead.<br>
<br>
</blockquote></div><br>I changed EXE to that CMAKE RUNTIME thing, thanks.<br><br>That NAME/COMMAND thing doesn't work for me at all. Can't find the binary without the runtime output path explicitly added.<br><br>
This is what I tried:<br><br>In parent CMakeLists.txt<br><br>ENABLE_TESTING()<br><br>set (CMAKE_TEST_COMMAND ctest -V)<br><br>function (add_unit_test name)<br> if(NOT TARGET ${name})<br> add_custom_target (check COMMAND ${CMAKE_TEST_COMMAND})<br>
endif()<br> add_executable(${name} ${ARGN})<br> add_test(NAME ${name} COMMAND $<TARGET_FILE:${name}>)<br> add_dependencies(check ${name})<br>endfunction()<br><br><br>in subdirectory CMakeLists.txt<br>add_unit_test(unit_string_numeric_utils units/unit_string_numeric_utils.cpp string_numeric_utils.cpp)<br>
<br>