CMake, похоже, добавляет библиотеки из библиотеки интерфейса, но они недоступны в VS2022.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 CMake, похоже, добавляет библиотеки из библиотеки интерфейса, но они недоступны в VS2022.

Сообщение Anonymous »

Я пытаюсь использовать CMake v3.30.5 для создания сборки проекта C++ с помощью VS2022. Я хотел бы включить сторонний код через FetchContent, чтобы мне не нужно было добавлять его в дерево исходного кода. Код будет помещен в каталог SDKs в корне проекта и использован ядром проекта, также размещенным в корне. Для первого я хочу добавить FastDelegate (https://github.com/dreamcat4/FastDelegate) в качестве библиотеки только для заголовков, поэтому я объявил ее ИНТЕРФЕЙС, поскольку она не компилирует никаких исходников.
Мой корневой файл CMakeLists.txt выглядит так:

Код: Выделить всё

cmake_minimum_required(VERSION 3.24)

project(MyProj
LANGUAGES CXX
VERSION 0.0.1)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake")
set(SDK_DIR "${CMAKE_CURRENT_SOURCE_DIR}/SDKs")
set_property(GLOBAL PROPERTY USE_FOLDERS ON)

add_subdirectory(SDKs)
add_subdirectory(Core)
CMakeLists.txt SDK успешно извлекает исходный код, помещает его в папку SDKs/FastDelegate и запускает find_package, как я и ожидал:

Код: Выделить всё

include (FetchContent)

FetchContent_Declare(FastDelegate
GIT_REPOSITORY https://github.com/dreamcat4/FastDelegate.git
GIT_PROGRESS true
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/FastDelegate"
BINARY_DIR "${CMAKE_BINARY_DIR}/SDKs/FastDelegate"
FIND_PACKAGE_ARGS)

FetchContent_MakeAvailable(FastDelegate)
FindFastDelegate.cmake для find_package создает библиотеку INTERFACE с заголовками и устанавливает каталог включения:

Код: Выделить всё

cmake_minimum_required(VERSION 3.24)

set(SRC_DIR "${SDK_DIR}/FastDelegate")

add_library(FastDelegate INTERFACE
"${SRC_DIR}/FastDelegate.h"
"${SRC_DIR}/FastDelegateBind.h")
add_library(SDK::FastDelegate ALIAS FastDelegate)
target_include_directories(FastDelegate INTERFACE ${SRC_DIR})
set_target_properties(FastDelegate PROPERTIES FOLDER "SDKs/FastDelegate")
и мой Core CMakeLists.txt ссылается на библиотеку FastDelegate INTERFACE:

Код: Выделить всё

cmake_minimum_required(VERSION 3.24)

add_library(Core STATIC
Core_defines.h)
set_target_properties(Core PROPERTIES LINKER_LANGUAGE CXX)
target_include_directories(Core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

target_link_libraries(Core
PUBLIC
SDK::FastDelegate)

# added this to make sure include directories are correct
file(GENERATE OUTPUT "$output.txt"
CONTENT "$")
Выходные данные теста действительно показывают, что каталоги включения для библиотеки Core

Код: Выделить всё

C:/Projects/MyProj/Core;C:/Projects/MyProj/SDKs/FastDelegate
как я и ожидал. Однако проект MSVC не перечисляет ни один из них в каталогах включения, и я не могу #include файлы FastDelegate.
Я что-то пропустил или сделал что-то не так, или это есть проблемы с CMake?

Подробнее здесь: https://stackoverflow.com/questions/792 ... eyre-not-a
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»