Как связать библиотеку, добавленную из других CMakeLists - PullRequest
1 голос
/ 13 апреля 2019
Project folder
|\ - Library folder
|     - CMakeLists.txt (1)
|
 \ - Tests folder
      - CMakeLists.txt (2)

Я использую add_library в (1).
Я хочу использовать target_link_libraries( tests library ) в CMakelists.txt (2).

Я полностью сбит с толку CMake. Я использовал это некоторое время, но это действительно сбивает меня с толку. link_directories, find_library, интерфейсы, глобальные; они очень запутанные.

1 Ответ

0 голосов
/ 13 апреля 2019

Вы не предоставили много информации об ошибке или коде, чтобы действительно понять проблему, но есть несколько потенциальных проблем, основанных на вашем описании:

  1. Возможно, вам не хватает файла CMakeLists.txt верхнего уровня, чтобы связать ваши файлы CMake (1) и (2) вместе.
  2. Несовместимые имена целей / переменных между файлами CMake (1) и (2).

Для проекта, подобного этому, типичная файловая иерархия CMake будет включать файл CMakeLists.txt верхнего уровня с чем-то вроде:

cmake_minimum_required(VERSION 3.9)
project(MyProject1)

add_subdirectory(LibraryFolder)
add_subdirectory(TestsFolder)

Команды add_subdirectory сообщают CMake, где еще искать дополнительные файлы CMake и другой исходный код, который вы хотите создать. В этом случае CMake будет искать в каталогах LibraryFolder и TestsFolder.

Другие два CMakeLists.txt файла могут выглядеть примерно так:

CMakeLists.txt (в LibraryFolder)

project(MyLibraryProject)
# Define the library, named MyLibrary1, that you want to build here.
add_library(MyLibrary1
    Puppy.cpp
    Puppy.hpp
)

CMakeLists.txt (в TestsFolder)

project(MyTestsProject)
# Define the executable, named MyTestExecutable, that you want to build here.
add_executable(MyTestExecutable
    main.cpp
)
# Link libraries that your executable depends on.
target_link_libraries(MyTestExecutable MyLibrary1)

Будьте внимательны, чтобы убедиться, что имена папок, предоставленные для add_subdirectory, совпадают с именами папок в вашей системе, и чтобы ваши целевые имена CMake (например, MyLibrary1) соответствовали всем вашим файлам.

При отладке CMake мне всегда полезно использовать команду message для вывода любых переменных, представляющих интерес для экрана. Это облегчает проверку того, что CMake делает то, что мы ожидаем.

Если у вас все еще есть вопросы, я предлагаю прочитать ответ здесь , который предоставляет больше контекста и обзора того, как использовать CMake.

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