簡體   English   中英

如何在 cmake 中使用 emscripten 端口(SDL2 和 Freetype)

[英]How to use emscripten ports (SDL2 and Freetype) with cmake

我正在嘗試使用 CMake 將 C++ 項目編譯到 webassembly。 我正在使用 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 emcmake cmake. && make ,這給了我一個錯誤,說它找不到 SDL2 的 package 配置文件。

我嘗試修改 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. 運行成功,但隨后抱怨它找不到SDL2/SDL.h make

我根據這個頁面、 這個頁面和這個頁面修復了這個問題:

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})

這使用emcmake cmake. && make emcmake cmake. && make定期使用cmake. && make cmake. && make

我用這個欺騙了emcc安裝 zlib 端口:

emcc -s USE_ZLIB=1 $(mktemp)

emcmake cmake..開始為我工作。 我打賭你應該能夠對 SDL 做同樣的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM