On 5. Oct, 2010, at 3:52 , Michael Hertling wrote: > On 10/04/2010 11:15 PM, Mateusz Loskot wrote: >> On 04/10/10 14:24, Michael Hertling wrote: >>> On 10/04/2010 10:53 AM, Mateusz Loskot wrote: >>>> On 04/10/10 07:33, J Decker wrote: >>>>> CMAKE_INSTALL_CONFIG_NAME I don't know if there's a simple flag like >>>>> 'project supports multiple targets' so I have an if(MSVC) set( >>>>> MULTI_TARGET) endif() .... if( MULTI_TARGET ) Install( targets ... >>>>> ${CMAKE_INSTALL_CONFIG_NAME ) else() isntall( ... ${CMAKE_BUILD_TYPE} >>>> >>>> >>>> I need it before firing up install procedures. >>>> I build. >>>> I run tests (here I need to know location of build output per target). >>> >>> Have you already taken a look at ADD_TEST()'s generator expressions like >>> $<TARGET_FILE_DIR:tgt>? AFAIK, they've been introduced quite exactly to >>> meet requirements such as yours. >> >> Hmm, I've seen this expressions, but I'm not sure how it can be useful >> because the expressions are used to generate test input. >> >> My problem is about getting property to generate environment >> for test before it is executed: >> >> In one subtree of my sources, I have mylib target building mylib.dll >> In another subtree, I have test. Next, I build and run test: >> >> add_executable(mytest test.cpp) >> >> target_link_libraries(mytest mylib_import.lib) >> >> add_test(mytest ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/mytest) >> >> set_tests_properties(mytest PROPERTIES >> ENVIRONMENT "PATH=c:\path\to\dir\with\mylib.dll\") >> >> I need to figure out this: "c:\path\to\dir\with\mylib.dll\" > > You might consider to use a script as a test driver which takes > the desired path and the test executable as parameters, e.g. > > ADD_TEST(mytest > testdriver $<TARGET_FILE_DIR:mylib> $<TARGET_FILE:mytest>) > > with testdriver setting the PATH and executing mytest. > > Regards, > > Michael
Ah, yes, this is even better than my idea of configuring. So, you could have a CMake script like the following: testdriver.cmake ---------------- # check arguments LIBDIR, TESTEXE and WIN32 foreach(var LIBDIR TESTEXE WIN32) if(NOT DEFINED ${var}) message(FATAL_ERROR "${var} not defined") endif() endforeach() # on Windows set PATH if(WIN32) set($ENV{PATH} "${LIBDIR};$ENV{PATH}") endif(WIN32) # run TESTEXE execute_process( COMMAND "${TESTEXE}" RESULT_VARIABLE result) if(result) message(FATAL_ERROR "Running ${TESTEXE} failed") endif() # EOF CMakeLists.txt -------------- ... add_test(NAME bar COMMAND "${CMAKE_COMMAND}" -DLIBDIR=$<TARGET_FILE_DIR:foo> -DTESTEXE=$<TARGET_FILE:bar> -DWIN32=${WIN32} -P "${CMAKE_CURRENT_SOURCE_DIR}/testdriver.cmake" ) ... # EOF I hope this helps -- There is always a well-known solution to every human problem -- neat, plausible, and wrong. H. L. Mencken
PGP.sig
Description: This is a digitally signed message part
_______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake