I Ubuntu, я узнаю о cmake и make, и просто попробую простой пример. У меня есть два каталога: src
и build
. В src
у меня есть два файла: main.cpp
и CMakeLists.txt
, у которых есть (только) следующий текст:
add_executable(test main.cpp)
link_directories(/usr/lib/x86_64-linux-gnu)
target_link_libraries(test protobuf)
В /usr/lib/x86_64-linux-gnu
имеется разделяемая библиотека под названием libprotobuf.so
, с которой я хочу связать. Мой main.cpp
использует функции в этой библиотеке, включая заголовочный файл-релиз, #include <google/protobuf/message.h>
.
Теперь, в моем каталоге build
, я запустил cmake ../src
, а затем make
. Тем не менее, я получаю ошибки компоновщика, говорящие мне, что есть ссылки undefined на некоторые из функций библиотеки protobuf. Если я выполняю поиск по всем файлам и подкаталогам в build
, не упоминается ничего, связанное с protobuf.
Однако, если я удалю строку link_directories
в моем CMakeLists.txt
файле и вместо этого напишу полный путь к библиотеке при указании исполняемого файла, т.е. target_link_libraries(test /usr/lib/x86_64-linux-gnu/libprotobuf.so)
, он компилирует и связывает в порядке.
Почему link_directories
не позволяет cmake найти эту библиотеку?