Пользовательская библиотека не может открывать исходные файлы зависимостей, таких как SDL2 и Box2D

#c #cmake #vcpkg

#c #cmake #vcpkg

Вопрос:

Я работал над созданием своей собственной игровой платформы и недавно пытался выяснить, как скомпилировать ее как библиотеку с помощью CMake. Однако я столкнулся с проблемой, которую я не могу понять. При попытке использовать файл библиотеки, созданный CMake, появляются ошибки, сообщающие, что не удается открыть библиотеку, например «Ошибка состояния подавления строки в файле проекта с описанием серьезности (активен) E1696 не удается открыть исходный файл ‘SDL2 /SDL.h’ Test F:CodeMyProjectincludeApp.h 7«. Я полагал, что это было вызвано тем, что зависимости не экспортировались с помощью фреймворка. Также на всякий случай, если это поможет, я использовал Vcpkg для получения своих библиотек.

Вот мой CMakeLists.txt файл:

 cmake_minimum_required(VERSION 3.7)

set(PROJECT_NAME MyProject)

set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)

if(NOT DEFINED CMAKE_TOOLCHAIN_FILE)
    set(CMAKE_TOOLCHAIN_FILE "vcpkg/scripts/buildsystems/vcpkg.cmake"
    CACHE STRING "")
    message(" [INFO] VCPKG CMAKE_TOOLCHAIN_FILE = ${CMAKE_TOOLCHAIN_FILE}")
endif()

project(${PROJECT_NAME} VERSION 1.0.0)

find_package(SDL2 CONFIG REQUIRED)
message(" [INFO] Found SDL2")
find_package(sdl2-image CONFIG REQUIRED)
message(" [INFO] Found SDL2-Image")
find_package(sdl2-mixer CONFIG REQUIRED)
message(" [INFO] Found SDL2-Mixer")
find_package(sdl2-ttf CONFIG REQUIRED)
message(" [INFO] Found SDL2-TTF")
find_package(unofficial-box2d CONFIG REQUIRED)
message(" [INFO] Found Box2D")

file(GLOB SOURCES "include/*h" "include/*.cpp")

add_library(${PROJECT_NAME} STATIC ${SOURCES})

target_link_libraries(${PROJECT_NAME} PRIVATE SDL2::SDL2 SDL2::SDL2main PRIVATE SDL2::SDL2_image PRIVATE SDL2::SDL2_mixer PRIVATE SDL2::SDL2_ttf PRIVATE unofficial::box2d::box2d )

set_target_properties( ${PROJECT_NAME}
    PROPERTIES
    ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/lib"
    LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/lib"
    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin"
)
  

Комментарии:

1. Пожалуйста, добавьте точное сообщение об ошибке в сообщение с вопросом, которое включает, среди прочего, местоположение ошибки.

2. Ошибка говорит, что у вас отсутствуют заголовки. Вам нужно добавить правильные target_include_directories , которые содержат отсутствующие заголовки.

3. Ну, когда я сделал это как исполняемый файл, программа работала нормально, и только после замены ее на библиотеку она начала давать сбой. Мне все еще нужно включать директории?

4. Этот файл CMake предназначен для вашей платформы или библиотеки, которая его использует?

5. Это для моей платформы, которая зависит от некоторых внешних библиотек