[CMake] download file, modify, add test from it

Nico Schlömer nico.schloemer at gmail.com
Sun Nov 22 14:54:10 EST 2015


I was under the impression that if I don't explicitly build a target, it
won't get build. Perhaps I'm wrong here. In any case, this
```
add_custom_target(convert)
add_dependencies(convert testFetchData)
add_custom_command(
  TARGET convert
  COMMAND cp test.e test.g
  )
```
never gets executed on `make`, unlike all other targets (e.g., `
testFetchData`). (Full CMakeLists.txt at [1].) Explicitly calling `make
convert` works alright.

Any idea why that might be?

Cheers,
Nico

[1] http://chunk.io/f/729beeab41fb4a7385ceb98b31a2ea0a

On Sun, Nov 22, 2015 at 8:46 PM David Cole <DLRdave at aol.com> wrote:

> What do you mean by "depend" in this case? All libs and exes should be
> built during a "make" or "make all" or "make install" ... And all that
> should be done before any tests get run.
>
> Simply typing "ctest" to execute all the tests never does any building.
> The assumed workflow is that you build stuff first and then run the tests.
>
> If you want, you can add a custom target that runs a test, and make that
> custom target depend on any other targets, but ctest still won't know about
> it. Only "make custom_test_target" will...
>
>
> D
>
>
>
> On Sunday, November 22, 2015, Nico Schlömer <nico.schloemer at gmail.com>
> wrote:
>
>> Thanks for the hints!
>> I'm almost there now, the only thing missing is to have my test depend on
>> the custom_target. This
>> ```
>> SET_TESTS_PROPERTIES(testname PROPERTIES DEPENDS convert)
>> ```
>> doesn't do the trick: The target `convert` isn't executed before `ctest`.
>>
>> Any hints?
>>
>> Cheers,
>> Nico
>>
>>
>> On Sun, Nov 22, 2015 at 3:18 AM David Cole <DLRdave at aol.com> wrote:
>>
>>> Did you try using full path names for the add_custom_command file names?
>>>
>>> And the NAME/COMMAND form of the add_test command?
>>>
>>> Also, I've always found custom commands to work best when they're
>>> associated with a target. And if it was part of a target you could make the
>>> target depend on the external data target with add_dependencies if
>>> necessary.
>>>
>>>
>>> HTH,
>>> David C.
>>>
>>>
>>> On Saturday, November 21, 2015, Nico Schlömer <nico.schloemer at gmail.com>
>>> wrote:
>>>
>>>> Hi everyone,
>>>>
>>>> I would like to create a CMake test that does the following:
>>>>  * Download a file from an external resource
>>>>  * Do something with the file
>>>>  * compile an executable myTest
>>>>  * execute myTest outputfile
>>>>
>>>> Using ExternalData for downloading the file works well, but the second
>>>> step (file conversion, in this example cp for simplicity) does not work:
>>>> ```
>>>> cmake_minimum_required(VERSION 3.2)
>>>>
>>>> project(mytest)
>>>>
>>>> # Download the files
>>>> INCLUDE(ExternalData)
>>>> set(
>>>>   ExternalData_URL_TEMPLATES
>>>>   "https://downloads.sourceforge.net/project/noshdata/%(algo)/%(hash)"
>>>>   )
>>>> ExternalData_Expand_Arguments(
>>>>   testFetchData
>>>>   OUT_DATA DATA{${CMAKE_SOURCE_DIR}/test.e}
>>>>   )
>>>> ExternalData_Add_Target(testFetchData)
>>>>
>>>> add_custom_command(
>>>>   OUTPUT test.g
>>>>   COMMAND cp test.e test.g
>>>>   DEPENDS test.e
>>>>   )
>>>>
>>>> ADD_EXECUTABLE("myTest" main.cpp)
>>>>
>>>> add_test(myTest test.g)
>>>> ```
>>>> I suppose I'm missing something about the dependencies here; after all,
>>>> the `add_custom_command` has to wait for `testFetchData` to complete.
>>>> Likewise, `add_test` has to wait for `add_custom_command` to complete.
>>>>
>>>> Hints appreciated.
>>>>
>>>> Cheers,
>>>> Nico
>>>>
>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20151122/3f321db1/attachment.html>


More information about the CMake mailing list