Как использовать порты emscripten (SDL2 и Freetype) с cmake - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь скомпилировать проект C ++, используя CMake для веб-сборки. Я использую emscripten и хочу использовать порты emscripten для SDL2 и Freetype. Обычно при компиляции с em cc вы должны использовать флаги: -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 для использования em cc флаги для портов:


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'.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 05 мая 2020

Я исправил проблему, основываясь на этой странице: https://github.com/emscripten-core/emscripten/issues/9259,

на этой странице: Создание веб-сборки из проекта CMake с указанным HTML выводом,

и эта страница: Emscripten - cmake - передать параметры emscripten в файл CMakeList

<pre><code>
cmake_minimum_required(VERSION 3.15)
project(project)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")

if( ${CMAKE_SYSTEM_NAME} MATCHES "Emscripten")
    set(USE_FLAGS "-s USE_SDL=2 -s USE_FREETYPE=1")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${USE_FLAGS}")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${USE_FLAGS}")
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${USE_FLAGS}")
    set(CMAKE_EXECUTABLE_SUFFIX .html)
else()
    find_package(SDL2 REQUIRED)
    find_package(Freetype REQUIRED)
endif()
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})

Это компилируется с помощью emscripten с использованием emcmake cmake . && make и регулярно с cmake . && make.

...