#c #macos #visual-studio-code #cmake #glfw
#c #macos #visual-studio-code #cmake #glfw
Вопрос:
У меня возникли проблемы с использованием GLFW на моем Mac. В настоящее время я использую CMake и visual studio code на macOS Catalina 10.15.7. В настоящее время я использую GLFW 3.4.0.
Но я просто продолжаю получать все эти сообщения об ошибках от GLFW. Похоже, проблема с файлами .m. Я продолжаю получать сообщения об ошибках, подобные этим:
GLFW/src/nsgl_context.m:81:5: error: expected expression
@autoreleasepool {
^
GLFW/src/cocoa_init.m:80:5: warning: 'UseDictionary' is deprecated: first deprecated in macOS 10.8 [-Wdeprecated-declarations]
NSDictionary* bundleInfo = [[NSBundle mainBundle] infoDictionary];
GLFW/src/cocoa_monitor.m:228:34: error: use of undeclared identifier 'screen'; did you mean 'strlen'?
monitor->ns.screen = screen;
Я добавил GLFW в качестве подмодуля из git, поэтому он должен быть актуальным.
Это всего лишь несколько примеров, но я не знаю, как это исправить.
ПРАВИТЬ ПРАВИТЬ:
Мой CMakeLists.txt файл в настоящее время выглядит следующим образом:
cmake_minimum_required(VERSION 3.19.0-rc3)
include(FetchContent)
project(Engine)
set(VENDOR_DIR "${CMAKE_CURRENT_SOURCE_DIR}/vendor")
set(SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src")
set(HELPERS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/Helpers")
set(SOURCES
"${SOURCE_DIR}/Core/os.h"
"${SOURCE_DIR}/Core/platform.h"
"${SOURCE_DIR}/Core/core.h"
"${SOURCE_DIR}/Display/Display.h"
"${SOURCE_DIR}/Display/Display.cpp"
"${SOURCE_DIR}/Helpers/IO.h"
"${SOURCE_DIR}/Platform/OpenGL/OpenGLDisplay.h"
"${SOURCE_DIR}/Platform/OpenGL/OpenGLDisplay.cpp"
)
# Configure assets header file
configure_file(${HELPERS_DIR}/IO.h.in ${HELPERS_DIR}/IO.h)
add_library(${PROJECT_NAME} ${SOURCES})
# OpenGL
find_package(OpenGL REQUIRED)
# GLFW
FetchContent_Declare(
GLFW
GIT_REPOSITORY "https://github.com/glfw/glfw"
GIT_TAG "3.3.2"
GIT_SHALLOW ON
)
FetchContent_MakeAvailable(GLFW)
target_link_libraries(${PROJECT_NAME} GLFW)
# glad
set(GLAD_DIR ${VENDOR_DIR}/glad)
add_library(glad ${GLAD_DIR}/src/glad.c)
target_include_directories(glad PRIVATE ${GLAD_DIR}/include)
target_include_directories(${PROJECT_NAME} PRIVATE ${GLAD_DIR}/include)
target_link_libraries(${PROJECT_NAME} glad ${CMAKE_DL_LIBS})
# glm
FetchContent_Declare(
glm
GIT_REPOSITORY "https://github.com/g-truc/glm.git"
GIT_TAG "0.9.9.8"
GIT_SHALLOW ON
)
FetchContent_MakeAvailable(glm)
target_link_libraries(${PROJECT_NAME} glm)
target_include_directories(${PROJECT_NAME} PUBLIC ${SOURCE_DIR})
target_precompile_headers(${PROJECT_NAME} PUBLIC "${SOURCE_DIR}/cpch.h")
target_compile_definitions(${PROJECT_NAME}
PRIVATE
CAFE_GML_ENABLED
_CRT_SECURE_NO_WARNINGS
GLFW_INCLUDE_NONE
PUBLIC
"$<$<CONFIG:DEBUG>:CAFE_DEBUG>"
"$<$<CONFIG:RELEASE>:CAFE_RELEASE>"
)
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20)
Комментарии:
1. Вот полное руководство, я уверен, что вы добьетесь успеха, если прочтете его: glfw.org/docs/3.3/build.html
2. Пожалуйста, сообщите нам, с какой точной версией / фиксацией glfw вы работаете. Эта информация имеет значение.
3. Я знаю, вы говорите, что используете gitsubmodules, но это не помогает. Вы хотите сказать, что всегда используете последнюю версию? Подмодуль для конкретной фиксации / ветки?
4. @cpp_guy_who_does_gfx я пытался использовать команды fetchContent CMake для извлечения GLFW 3.3.2, который работает с точки зрения выборки и компоновки, но я по-прежнему получаю много ошибок от GLFW, по-видимому, все они из файлов objective-c (.m), таких как coca_ .m и nsgl_ .m. У меня есть XCodeустановлен в моей системе, которая, насколько я понимаю, должна была установить все необходимые условия для запуска приложений OpenGL на моем mac.
5. Я отредактировал свой ответ с идеями. Но прежде чем что-либо делать, пожалуйста, дважды проверьте и прочитайте документацию glfw перед чем-либо. Я сам знаю в прошлом, что это быстро решает проблемы.
Ответ №1:
Этот код, который вы написали, неверен:
set(GLFW_DIR ${VENDOR_DIR}/GLFW)
set(GLFW_BUILD_DOCS OFF CACHE BOOL "GLFW lib only")
set(GLFW_INSTALL OFF CACHE BOOL "GLFW lib only")
add_subdirectory(${GLFW_DIR})
target_include_directories(Engine PRIVATE ${GLFW_DIR}/include)
target_link_directories(Engine PRIVATE ${GLFW_DIR}/src)
target_link_libraries(glfw)
Все, что вам нужно сделать, это следующее:
add_subdirectory(${GLFW_DIR})
target_link_libraries(glfw)
Включаемые каталоги правильно распространяются вверх.
Ваш вопрос даже не говорит нам, какую версию GLFW вы используете. Что вызывает беспокойство.
Вот как я рекомендую вам использовать glfw в современном проекте cmake:
# This command fetches glfw 3.3.2 from github
# Note the shallow parameter. This means it won't grab all the history.
FetchContent_Declare(glfw
GIT_REPOSITORY "https://github.com/glfw/glfw"
GIT_TAG "3.3.2"
GIT_SHALLOW ON
)
# Now make the glfw target available to link against
FetchContent_MakeAvailable(glfw)
target_link_libraries(foobar PRIVATE glfw)
Редактировать:
Я использую относительно новую версию cmake, поэтому я определенно знаю, что все это работает с cmake 3.15
Также, когда я сказал, что код, который вы написали, был неправильным, я имею в виду, как вы работали с каталогами включения. Переопределение переменных кэша — это нормально.
Редактировать 2:
Хм, на данный момент это могут быть реальные ошибки в glfw. Сборка для Apple сложна, поэтому, возможно, это настоящая ошибка glfw.
Вот мои рекомендации.
1.) Используйте последнюю фиксацию glfw и посмотрите, осталась ли у вас проблема
2.) Попробуйте просмотреть проблемы с GLFW https://github.com/glfw/glfw/issues
Это может быть известной проблемой.
3.) Отправьте запрос на выдачу / извлечение, если вы правы, ошибка исходит от GLFW
Комментарии:
1. я изменил способ включения GLFW, но все равно получаю те же ошибки. Я отредактировал свой вопрос, добавив больше файлов cmakelists