<br><br><div class="gmail_quote">On 8 July 2010 15:31, Michael Wild <span dir="ltr">&lt;<a href="mailto:themiwi@gmail.com">themiwi@gmail.com</a>&gt;</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>
&gt; On 8 July 2010 12:56, Michael Wild &lt;<a href="mailto:themiwi@gmail.com">themiwi@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; On 8. Jul, 2010, at 4:40 , Paul Harris wrote:<br>
&gt;&gt;<br>
&gt;&gt;&gt; On 7 July 2010 23:05, Michael Wild &lt;<a href="mailto:themiwi@gmail.com">themiwi@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; On 7. Jul, 2010, at 16:01 , Paul Harris wrote:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Hi all,<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; I have looked and can&#39;t find the answer, so I turn to the list.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; I have a CMakeLists.txt and a subdirectory called utils, which also has<br>
&gt;&gt;&gt;&gt; its<br>
&gt;&gt;&gt;&gt;&gt; own CMakeLists.txt<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; In the parent CML.txt, I have something like:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; ENABLE_TESTING()<br>
&gt;&gt;&gt;&gt;&gt; add_subdirectory(utils)<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; In my utils CML.txt, I have<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; ADD_EXECUTABLE(unit_1 units/unit_1.cpp)<br>
&gt;&gt;&gt;&gt;&gt; ADD_TEST( unit_1 ${EXECUTABLE_OUTPUT_PATH}/unit_1 )<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Simplify this to<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; ADD_TEST(unit_1 unit_1)<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; CMake will figure out by itself that unit_1 is a target and invoke the<br>
&gt;&gt;&gt;&gt; executable correctly (your code would break for multi-configuration IDE<br>
&gt;&gt;&gt;&gt; generators).<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt; This does not work for me.  If I do not have the EXECUTABLE_OUTPUT_PATH<br>
&gt;&gt; in<br>
&gt;&gt;&gt; add_test, I get a message like this when i run &quot;make test&quot; (shortened for<br>
&gt;&gt;&gt; brevity):<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; 1/  1 Testing unit_string_numeric_utils     Could not find executable<br>
&gt;&gt;&gt; unit_string_numeric_utils<br>
&gt;&gt;&gt; Looked in the following places:<br>
&gt;&gt;&gt; unit_string_numeric_utils<br>
&gt;&gt;&gt; unit_string_numeric_utils<br>
&gt;&gt;&gt; Release/unit_string_numeric_utils<br>
&gt;&gt;&gt; Release/unit_string_numeric_utils<br>
&gt;&gt;<br>
&gt;&gt; Mmmh, works fine for me:<br>
&gt;&gt;<br>
&gt;&gt; ---------&gt;8---------<br>
&gt;&gt; cmake_minimum_required(VERSION 2.8)<br>
&gt;&gt; project(tmp)<br>
&gt;&gt;<br>
&gt;&gt; enable_testing()<br>
&gt;&gt;<br>
&gt;&gt; add_executable(unit1 unit1.cpp)<br>
&gt;&gt; add_test(unit1 unit1)<br>
&gt;&gt; ---------&lt;8---------<br>
&gt;&gt;<br>
&gt;&gt; Where unit1.cpp is just a simple hello-world program. Running it:<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt; snip<br>
&gt;<br>
&gt; My project is a lot bigger than a hello-world program.  It has<br>
&gt; subdirectories for a start, and I do things like<br>
&gt;  SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin CACHE INTERNAL &quot;Single<br>
&gt; output directory for building all executables.&quot;)<br>
&gt;<br>
&gt; I&#39;m not sure at which point things stop working, do you want me to try and<br>
&gt; 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 $&lt;TARGET_FILE:unit1&gt;)<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&#39;t work for me at all.  Can&#39;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 $&lt;TARGET_FILE:${name}&gt;)<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>