[CMake] How to specify LD_LIBRARY_PATH for a test?

Alexander Neundorf a.neundorf-work at gmx.net
Tue Feb 26 14:30:23 EST 2013


On Tuesday 26 February 2013, Orion Poplawski wrote:
> On 02/26/2013 12:06 PM, Alexander Neundorf wrote:
> > On Tuesday 26 February 2013, Orion Poplawski wrote:
> >> We have some tests that load libraries at run time.  How can we specify
> >> that LD_LIBRARY_PATH needs to be set?
> >> 
> >> file(WRITE ${CMAKE_SOURCE_DIR}/testsuite/launchtest.c "${LAUNCH}")
> >> add_executable(launchtest EXCLUDE_FROM_ALL
> >> ${CMAKE_SOURCE_DIR}/testsuite/launchtest.c)
> >> add_library(test_ce SHARED EXCLUDE_FROM_ALL libtest_ce.cpp)
> >> add_custom_target(check COMMAND ${CMAKE_BUILD_TOOL} test DEPENDS
> >> launchtest test_ce)
> >> get_target_property(LAUNCHTESTLOCATION launchtest LOCATION)
> >> execute_process(
> >> 
> >>     COMMAND "fgrep" ".pro" "${BASE_SOURCE}/testsuite/Makefile.am"
> >>     COMMAND "awk" "{printf(\"%s;\",$1)}"
> >>     OUTPUT_VARIABLE TESTS)
> >> 
> >> foreach(TEST ${TESTS})
> >> 
> >>           add_test(${TEST} ${LAUNCHTESTLOCATION} ${TEST})
> >> 
> >> endforeach(TEST TESTS)
> >> 
> >> The test needs to be able to load the test_ce library at run-time.
> > 
> > If you didn't explicitely disable it, cmake builds the executables by
> > default with the complete RPATH to all used libraries (the "build
> > RPATH"). This is replaced during make install by the "install RPATH",
> > which is by default empty.
> > So it should actually just work.
> > 
> > Alex
> 
> The tests are not being linked to the library.  The tests are dlopening
> them at run time.

Ah, I missed that.
You could use configure_file() to create a header which contains the location 
of the libraries in the build tree (e.g. using get_target_property(... 
LOCATION) ), and then load them using this absolute path. For a test which is 
only supposed to work in the build tree this may be acceptable.

Alex


More information about the CMake mailing list