it-swarm.com.ru

Ошибка «Нет правила для цели» в cmake при соединении с общей библиотекой

В Ubuntu я загрузил стороннюю общую библиотеку mylibrary.so, которую я поместил в каталог /home/karnivaurus/Libraries. Я также поместил связанный заголовочный файл myheader.h в каталог /home/karnivaurus/Headers. Теперь я хочу сделать ссылку на эту библиотеку в своем коде C++, используя cmake. Вот мой файл CMakeLists.txt:

cmake_minimum_required(VERSION 2.0.0)

project(DemoProject)

include_directories(/home/karnivaurus/Headers)

add_executable(demo demo.cpp)

target_link_libraries(demo /home/karnivaurus/Libraries/mylibrary)

Тем не менее, это дает мне сообщение об ошибке:

:-1: error: No rule to make target `/home/karnivaurus/Libraries/mylibrary', needed by `demo'.  Stop.

В чем дело?

5
Karnivaurus

Вы можете использовать полный путь к статической библиотеке. Чтобы связать с динамическим, лучше использовать link_directories(), например:

cmake_minimum_required(VERSION 2.0.0)

project(DemoProject)

include_directories(/home/karnivaurus/Headers)
link_directories(/home/karnivaurus/Libraries)

add_executable(demo demo.cpp)

target_link_libraries(demo mylibrary)

и убедитесь, что mylibrary имеет префикс lib и суффикс .so в имени файла (то есть полное имя /home/karnivaurus/Libraries/libmylibrary.so).

Чтобы сделать ваш проект более гибким, лучше написать модуль Finder и избегать путей с жестким кодом, таких как /home/karnivaurus/*

2
zaufi