Thanks David for your explanations. I've now reached a good solution: Fetch the data: ``` INCLUDE(ExternalData) set( ExternalData_URL_TEMPLATES "https://downloads.sourceforge.net/project/noshdata/%(algo)/%(hash)" ) foreach(file ${input_files}) ExternalData_Expand_Arguments( noshTestFetchData OUT_DATA DATA{${CMAKE_SOURCE_DIR}/test/data/${file}.e} ) endforeach() ExternalData_Add_Target(noshTestFetchData) ``` Define conversion commands: ``` foreach(file ${input_files}) LIST(APPEND FILES2 ${file}-2.h5m) add_custom_command( DEPENDS ${file}.e COMMAND convert ${file}.e ${file}.h5m OUTPUT ${file}.h5m ) endforeach() ``` Add a custom target with ALL: ``` add_custom_target(split2 ALL SOURCES ${FILES2} ) ``` Adding the output files to the SOURCES makes the target do what's its supposed to do.
Cheers, Nico On Sun, Nov 22, 2015 at 11:59 PM David Cole <dlrd...@aol.com> wrote: > You don't. You just assume all relevant targets have already been built by > the time you run the tests... There's no such thing as a test from > an add_test call depending on a target. > > There **is** a dependency, of course, if you are using one of the build > products in your test, but it's assumed that everything is already built at > test time. > > There is not yet a notion of connecting certain tests to certain build > targets. > > So, for example, there is no way to re-run only the tests affected by > things which have changed since the last build, because there is no > connection between targets and tests. > > People have artificially created such connections using test labels, and > running subsets of tests by label, but there is no official dependency from > tests back to targets. > > > D > > > > On Sunday, November 22, 2015, Nico Schlömer <nico.schloe...@gmail.com> > wrote: > >> Aha, this was a misunderstanding of me then. Thanks! >> How do I make a test depend on a target then? >> >> Cheers, >> Nico >> >> >> On Sun, Nov 22, 2015 at 8:58 PM David Cole <dlrd...@aol.com> wrote: >> >>> The DEPENDS property of a test is meant to ensure test running order in >>> the case of parallel testing... It simply ensures that one test runs before >>> another. It is not connected to the build system at all. It's different >>> than target dependencies. >>> >>> >>> D >>> >>> >>> >>> On Sunday, November 22, 2015, David Cole <dlrd...@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.schloe...@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 <dlrd...@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.schloe...@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 >>>>>>> >>>>>>
-- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: http://public.kitware.com/mailman/listinfo/cmake