Как мне исправить мою конфигурацию cmake, которая создает библиотеку, которая использует PRIVATE include_directories - PullRequest
0 голосов
/ 16 апреля 2019

Я учусь писать «современные» конфигурации cmake и пытаюсь создать ссылку на библиотеку с исполняемым файлом.Моя структура тестового проекта выглядит следующим образом:

.
|-- foo
|   |-- src
|   |   |-- foo.cpp
|   |   `-- foo_impl.cpp
|   |-- include
|   |   `-- foo
|   |       `-- foo.h
|   |-- internal
|   |   `-- foo_impl.h
|   `-- CMakeLists.txt
|-- src
|   `-- main.cpp
`-- CMakeLists.txt

. / CMakeLists.txt равен

cmake_minimum_required(VERSION 3.12)

project(test_cmake LANGUAGES CXX)

add_subdirectory(foo)
add_executable(test_executable
  src/main.cpp
  )

target_include_directories(test_executable
  PRIVATE
    include
    foo
  )

. / Foo / CMakeLists.txt равен

cmake_minimum_required(VERSION 3.12)

add_library(foo
  src/foo_impl.cpp
  src/foo.cpp
  )

target_include_directories(foo
  PUBLIC
    include
  PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}
  )

Причиной такой конфигурации является проверка, предоставляет ли cmake папку «foo / internal» клиентам библиотеки foo.

  1. Не удается соединиться с библиотекой foo.
  2. Невозможно использовать#include "foo / foo.h" в коде клиента.

Я допустил ошибку в своей конфигурации?

1 Ответ

2 голосов
/ 16 апреля 2019

У вас есть тип / ошибка в вашем cmake.

В CMakeLists.txt вы делаете:

target_include_directories(test_executable

Это добавит включающие каталоги. Вам необходимо связаться с foo проектом:

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