[CMake] building tests

Michael Wild themiwi at gmail.com
Thu Jul 8 03:31:41 EDT 2010


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.



More information about the CMake mailing list