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 найти эту библиотеку?