Cmake не может найти заголовок из библиотеки - PullRequest
1 голос
/ 29 апреля 2020

У меня есть следующая структура в моем проекте.

project-
  include-
  src-
     ab.cpp
     ab.h
  tests
     CMakeLists.txt
  CMakeLists.txt

Я создаю библиотеку в каталоге project/CMakeLists.txt, используя add_library. В каталоге тестов CMake я использую target_link_libraries. Теперь мой тест. cpp он не находит ab.h Я должен использовать target_include_directories с project/src path. target_link_libraries находит только заголовок из каталога include или что мне здесь не хватает?

1 Ответ

0 голосов
/ 30 апреля 2020

Действия, необходимые для связывания, аналогичны обычному потоку проекта C ++.

Для проекта с такой структурой:

src
  A.cpp
  A.h
  B.cpp
  B.h

Когда код в B.cpp хочет использовать функция, определенная в A.h, должна объявить ее с помощью оператора #include<A.h>, таким образом, код A.h копируется препроцессором, поэтому модуль перевода B.cpp знает о его существовании.

На этапе ссылки все объектные файлы связаны - «обещание», которое вы дали, заявив, что все объявления A.h выполняются A.o.

Аналогично, когда test.cpp использует функцию из библиотеки - вы сначала нужно объявить это, вот почему вы должны использовать target_include_directories и включать ab.h в test.cpp.

Затем на этапе компоновки вы должны сообщить компоновщику, где объявлена ​​реализация этих функций в ab.h найдены (ваш статический / динамический c файл библиотеки), для этого вы используете target_link_libraries.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...