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.

Так что я просто не могу заставить эту установку работать. Как это исправить, чтобы и мой исполняемый файл, и моя библиотека были установлены в нужном месте и чтобы мой исполняемый файл мог связываться с моей библиотекой при запуске?

0 ответов

Другие вопросы по тегам