4

This issue is MacOS X specific. I would like to link a library lib_xxx that sits outside my build tree at some arbitrary location. It will be at the same location in all systems. By default CMake would add the dependency as follows

@executable_path/libwupienginemac.dylib

I would like to know how to change @executable_path to either:

  1. Absolute path to the library. I see, for example the following in otool output

    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
    
  2. @rpath I could then manage the location of lib_xxx using RPATH. I prefer this option.

From the documentation and forums it looks like CMAKE_MACOSX_RPATH should solve the issue and implement option (2). Yet the CMakeLists.txt below still results in @executable_path/libwupienginemac.dylib dependency.

cmake_minimum_required(VERSION 3.1)

project(xxx_test)

set(CMAKE_MACOSX_RPATH 1)
find_library(LIB_XXX lib_xxx
    PATHS "/path/to/lib_xxx/lib"
    )
if (NOT LIB_XXX)
    message(FATAL_ERROR ""LIB XXX not found")
 endif()

add_executable(xxx_test xxx_test.cpp)
target_link_libraries(xxx_test
    ${LIB_XXX}
)
# Try running the executable at once
add_custom_target(wibut_test_run ALL
    COMMAND xxx_test
    DEPENDS xxx_test
    )
perror
  • 7,071
  • 16
  • 58
  • 85
Oleg Zhylin
  • 1,290
  • 12
  • 18

1 Answers1

0

Looks like at present CMake doesn't have any mechanisms to deal with this issue. I ended up copying my external dependency to ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}, which works fine for my scenarios.

Another way to handle this would be to use install_name_tool -id

Oleg Zhylin
  • 1,290
  • 12
  • 18