Как CMAKE говорит make-файлу связать библиотеку? - PullRequest
1 голос
/ 04 мая 2020

У меня есть простой исполняемый файл, который использует функции из библиотеки mylib на ~/mylib/lib/libmylib.so.

На CMakeLists.txt, я говорю CMAKE, где найти библиотеку и связать ее:

find_library(MYLIB_PATH mylib HINT $ENV{HOME}/mylib/lib)
target_link_libraries (output "${MYLIB_PATH}")

после выполнения cd build; cmake .. генерируется Makefile , и вызов make компилирует его успешно.


Но допустим, я комментирую вторую строку CMakeLists.txt как

find_library(MYLIB_PATH mylib HINT $ENV{HOME}/mylib/lib)
# target_link_libraries (output "${MYLIB_PATH}")

и выполняю то же самое cd build; cmake ... Я получаю точно такой же Makefile , однако make терпит неудачу с такими типами ошибок:

In function `Model::Model(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
Model.cpp:(.text+0x21): undefined reference to `TF_NewStatus'

Имеет смысл, что он терпит неудачу, потому что библиотека не связана. Но если оба Makefile одинаковы, почему один make потерпит неудачу, а не другой?

1 Ответ

4 голосов
/ 04 мая 2020

Для каждого исполняемого файла и библиотеки CMake создает сценарий link.txt, который выполняет этап связывания.

Этот файл используется в сценарии build.make для цели через

$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/<target-name>.dir/link.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...