В своем проекте я сначала создаю библиотеку, используя стандартные функции cmake. Вот упрощенная версия:
Код: Выделить всё
# Installation directories
include(GNUInstallDirs)
# Build library
add_library(${PROJECT_NAME} SHARED
${SRC_FILES}
)
# Definitions
target_compile_definitions(${PROJECT_NAME} PUBLIC ${DEFINITIONS})
# Properties
set_target_properties(${PROJECT_NAME} PROPERTIES
CXX_STANDARD 20
)
# Compile options
target_compile_options(${PROJECT_NAME} PRIVATE
-Wall -Wextra -Wpedantic
)
# Include directories
target_include_directories(${PROJECT_NAME} PUBLIC
$
$
)
# System include directories
target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC
${SYSTEM_INCLUDE_DIRS}
)
# Link libraries
target_link_libraries(${PROJECT_NAME} PUBLIC
${SYSTEM_LIBRARIES}
)
Код: Выделить всё
# Build tests
add_executable(${PROJECT_NAME}_tests
${TEST_SRC_FILES}
)
# Definitions
target_compile_definitions(${PROJECT_NAME}_tests PUBLIC ${TEST_DEFINITIONS})
# Properties
set_target_properties(${PROJECT_NAME}_tests PROPERTIES
CXX_STANDARD 20
)
# Compile Options
target_compile_options(${PROJECT_NAME}_tests PRIVATE
-Wall -Wextra -Wpedantic
)
# Include Directories
target_include_directories(${PROJECT_NAME}_tests PUBLIC
$
$
)
# System Include Directories
target_include_directories(${PROJECT_NAME}_tests SYSTEM PUBLIC
${TEST_SYSTEM_INCLUDE_DIRS}
)
# Link Libraries
target_link_libraries(${PROJECT_NAME}_tests PUBLIC
${PROJECT_NAME}
${TEST_SYSTEM_LIBRARIES}
)
# Enable ctest
enable_testing()
add_test(NAME ${PROJECT_NAME}_tests COMMAND ${PROJECT_NAME}_tests)
Код: Выделить всё
libmycoolproject.so => /home/username/src/mycoolproject/build/libmycoolproject.so (0x00007ffd2c8c3000)
Код: Выделить всё
0x0000000000000001 (NEEDED) Shared library: [libconvert.so]
... (more libraries)
0x000000000000001d (RUNPATH) Library runpath: [/home/username/src/mycoolproject/build:/usr/local/lib:/home/username/src/mycoolproject/build/gtest/lib]
Однако, как только я установите мою библиотеку с помощью sudo make install, ldd говорит мне:
Код: Выделить всё
libmycoolproject.so => /usr/local/lib/libmycoolproject.so (0x00007ffb480b3000)
Что я пробовал, но безуспешно:
- помещение BUILD_RPATH ${CMAKE_BINARY_DIR в set_target_properties
- добавление к CMAKE_BUILD_RPATH
- изменение порядок библиотек в target_link_libraries
- связывание с ${CMAKE_BINARY_DIR}/lib${PROJECT_NAME}.so вместо ${PROJECT_NAME
Подробнее здесь: https://stackoverflow.com/questions/787 ... ed-library