CMAKE: Как мне установить исполняемый файл вместе с необходимым dylib в пользовательский каталог?
Поэтому я использую CMake для создания проекта C++ (в Mac OS), и мой проект использует dylib (я использую TBB https://www.threadingbuildingblocks.org/ но сама библиотека не имеет значения)
Если я делаю стандартный cmake и make, он создает исполняемый файл там, где я хочу, и когда я запускаю свое приложение, dylib связывается правильно, и все работает отлично.
Проблема возникает, когда я пытаюсь выполнить "make install" и запустить полученный исполняемый файл из каталога установки. Я получаю сообщение об ошибке "изображение не найдено":
dyld: Library not loaded: @rpath/libtbb.dylib
Referenced from:
/Users/MyName/Desktop/ProjectRoot/install/./MyApp
Reason: image not found
Интересно, что если я выполняю обычное "make" без установки, а затем вручную копирую исполняемый файл в каталог установки, то это будет правильно связывать мой dylib. Я понятия не имею, почему это так.
Моя структура каталогов выглядит следующим образом:
Root
CMakeLists.txt
Source/
Libraries/
tbb/
include/
lib/
libtbb.dylib
install/
... и мой файл CMakeLists.txt находится ниже:
# Start of CMakeLists.txt
cmake_minimum_required(VERSION 3.3)
project (MyApp)
# Set C++ version and output paths
set (CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR})
set(CMAKE_MACOSX_RPATH 1)
set(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/install")
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
# Find TBB
find_library (
TBB_LIBRARIES
NAMES tbb libtbb # what to look for
HINTS "${CMAKE_SOURCE_DIR}/Libraries/tbb/lib" # where to look
NO_DEFAULT_PATH # do not search system default paths
)
# Set Custom Include Files + TBB header files
include_directories(Source/Headers Libraries/tbb/include)
# Set Source Files
file(GLOB_RECURSE SRC_FILES "Source/*.cpp")
add_executable(MyApp ${SRC_FILES})
# Link Libraries
target_link_libraries(MyApp ${TBB_LIBRARIES})
# Set compile flags
set_target_properties(MyApp PROPERTIES CXX_STANDARD 14) #LINK_FLAGS "-Wl")
target_compile_features(MyApp PUBLIC cxx_std_14)
# Install executable
install(TARGETS MyApp DESTINATION .)
Если я попытаюсь также добавить следующую строку и установить также dylib:
install(TARGETS ${TBB_LIBRARIES} DESTINATION lib)
затем, когда я делаю "make install", я получаю следующую ошибку:
install TARGETS given target
"/Users/MyName/Desktop/ProjectRoot/Libraries/tbb/lib/libtbb.dylib"
which does not exist in this directory.
Так что я просто не могу заставить эту установку работать. Как это исправить, чтобы и мой исполняемый файл, и моя библиотека были установлены в нужном месте и чтобы мой исполняемый файл мог связываться с моей библиотекой при запуске?