Я пытаюсь скомпилировать проект C++, используя CMake для веб-сборки. Я использую emscripten и хочу использовать порты emscripten для SDL2 и Freetype. Обычно при компиляции с помощью emcc вы должны использовать флаги: -USE_SDL=2 и -USE_FREETYPE=1, чтобы включить эти порты. Однако я не знаю, как добиться этого с помощью CMake.
Это мой файл CMakeList:
cmake_minimum_required(VERSION 3.15)
project(project)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
find_package(SDL2 REQUIRED)
find_package(Freetype REQUIRED)
include_directories(${CMAKE_SOURCE_DIR}/include ${SDL2_INCLUDE_DIRS} ${FREETYPE_INCLUDE_DIRS})
add_executable(project src/main.cpp src/glad.c src/Game.cpp src/Block.cpp include/jumpyblock/Block.h)
target_link_libraries(project ${SDL2_LIBRARIES} ${FREETYPE_LIBRARIES})
Он компилируется и успешно запускается с помощью обычного cmake.
До сих пор я пытался скомпилировать с помощью emcmake cmake . && make
, что дало мне ошибку, говорящую о том, что не удалось найти файл конфигурации пакета для SDL2.
И я попытался изменить файл CMakeList, чтобы использовать флаги emcc для портов:
cmake_minimum_required(VERSION 3.15)
project(project)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -USE_SDL=2 -USE_FREETYPE=1")
include_directories(${CMAKE_SOURCE_DIR}/include ${SDL2_INCLUDE_DIRS} ${FREETYPE_INCLUDE_DIRS})
add_executable(project src/main.cpp src/glad.c src/Game.cpp src/Block.cpp include/jumpyblock/Block.h )
target_link_libraries(project ${SDL2_LIBRARIES} ${FREETYPE_LIBRARIES})
С этим файлом cmake emcmake cmake .
работает успешно, но затем make
жалуется, что не может найти «SDL2/SDL.h».
Любая помощь будет принята с благодарностью.
target_link_libraries(project SDL2 freetype)
должно работать. В случае с Emscripten freetype и sdl2 будут всегда, так что нет необходимости в кросс-платформенных проверках. - person cajomar   schedule 22.08.2020