Cmake: цель, определенная в подкаталоге, не связывается. Я получаю неопределенную ссылку - PullRequest
0 голосов
/ 23 февраля 2020

Я не опытный пользователь CMake, в настоящее время я пытаюсь включить существующий проект в проект верхнего уровня, и CMakelists.txt проекта верхнего уровня очень прост:

cmake_minimum_required(VERSION 2.8)

project(A)

add_subdirectory(B)

Как На этом этапе постепенного тестирования я хотел посмотреть, как строятся цели, определенные в проекте B. Таким образом, запуск make all из каталога сборки проекта A строит правильно, но некоторые цели, которые не являются частью всего, не могут быть построены из каталога сборки проекта A, где я получаю ошибки ссылок с «неопределенной ссылкой», в то же время target может быть успешно собран из проекта B 'каталог сборки. Может кто-нибудь объяснить, пожалуйста, в чем проблема?

1 Ответ

0 голосов
/ 23 февраля 2020

При добавлении подкаталога cmake обрабатывает файл CMakeLists.txt только внутри этого подкаталога, не налагает какую-либо зависимость от создаваемой цели.

Это может помочь представить этот процесс просто как создание одного большого большого набора правил (для любой системы сборки, на которую он переводится) из всех добавляемых вами CMakeLists файлов.

Однако, это только поместит правила для всех отдельных CMakeLists целей в этом результирующем наборе правил, так что вы можете создавать эти цели по имени. Если вы решите построить цель в A, которая у вас не указана зависит от B (даже если это может на самом деле зависеть от нее), то B не будет

Для этого вам нужно будет установить зависимости компоновщика, что-то вроде (в зависимости от имен и того, что B генерирует, конечно):

cmake_minimum_required(VERSION 2.8)
project(A)
add_subdirectory(B)
target_link_libraries(A B)
...