Заставить cmake выбрать местоположение зависимости, если существует более одного

0

В директории /home/karnivaurus/Project меня есть три файла. У меня есть файл класса Foo.cpp, файл общей библиотеки libBar.so и файл CMakeLists.txt. У меня также есть аналогичная разделяемая библиотека с тем же именем libBar.so, которая находится в /usr/lib.

CMakeLists.txt содержит следующее:

add_library(Foo SHARED Foo.cpp)
target_link_libraries(Foo Bar)

После запуска cmake библиотека компилируется отлично и создает libFoo.so. Если я затем запустил команду ldd libFoo.so, это означает, что существует зависимость от /home/karnivaurus/Project/libBar.so.

Теперь я меняю вещи и вместо создания общей библиотеки хочу создать исполняемый файл. Итак, я создаю новый файл Main.cpp, который вызывает функции в Foo.cpp и меняет CMakeLists.txt на:

add_executable(Foo Foo.cpp Main.cpp)
target_link_libraries(Foo Bar)

Это компилируется отлично и создает исполняемый файл Foo. Однако, если я сейчас запускаю ldd Foo, он говорит мне, что есть зависимость от /usr/lib/libBar.so.

Поэтому мои вопросы:

1) Почему создание общей библиотеки вызывает зависимость от файла libBar.so в исходном каталоге, тогда как создание исполняемого файла вызывает зависимость от файла libBar.so каталоге usr/lib?

2) Как я могу заставить cmake создать зависимость от одного из них, а не другого?

Теги:
cmake

1 ответ

0

Ответьте на вопрос 2

Это должно сделать ссылку Foo /home/karnivaurus/Project/libBar.so:

link_directories( /home/karnivaurus/Project )
add_executable(Foo Foo.cpp Main.cpp)
target_link_libraries(Foo Bar)

Если это не сработает, вы всегда можете добавить абсолютный путь к библиотеке в вызове target_link_libraries:

target_link_libraries(Foo /home/karnivaurus/Project/libBar.so)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню