On 09/18/2010 05:37 PM, Clifford Yapp wrote:
> I have a situation where there exists on some systems a library
> (/lib/librt.so.1) that conflicts with the name we use for BRL-CAD's
> raytracing library (also librt).  For various reasons, I can't rename
> our lib - this means I have to deal with the situation where there
> exists a system library with the correct name but incorrect contents.
> 
> Generally, we install into directories with a prefix (e.g.
> /usr/brlcad) to avoid stomping over system libs.  However, when it
> comes to defining target_link_libraries lines for our executables, I
> end up with something like:
> 
> add_executable(rt ${rt_SRCS})
> target_link_libraries(rt librt)
> 
> This works splendidly, particularly combined with the RPATH settings
> that let me run the executables both in the build and install
> locations without jumping through hoops.  However, the linker
> (justifiably) is confused by the presence of the system librt file
> when it is present.
> 
> Is there a way to specify my local librt to the target_link_libraries
> command in such a way that avoids any chance of picking up the system
> librt, but still preserves the nice properties of running executables
> both in build and install directories cleanly?

Does setting the INSTALL_RPATH target property on rt work? E.g., with

CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)
PROJECT(RT C)
FILE(WRITE ${CMAKE_BINARY_DIR}/f.c "void f(void){}\n")
ADD_LIBRARY(librt SHARED f.c)
SET_TARGET_PROPERTIES(librt PROPERTIES OUTPUT_NAME rt)
FILE(WRITE ${CMAKE_BINARY_DIR}/main.c
    "int main(void){f(); return 0;}\n")
ADD_EXECUTABLE(rt main.c)
TARGET_LINK_LIBRARIES(rt librt)
SET_TARGET_PROPERTIES(rt PROPERTIES INSTALL_RPATH
    ${CMAKE_INSTALL_PREFIX}/lib)
INSTALL(TARGETS rt librt
    RUNTIME DESTINATION bin
    LIBRARY DESTINATION lib)

I can see rt linking against its librt - in the build directory as well
as in the install directory - but without the INSTALL_RPATH setting, rt
in the install directory links against the system's librt, so it fails,
whereas in the build directory, it still links against its own librt.

Regards,

Michael
_______________________________________________
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

Reply via email to