Ast*_*joe 5 c++ port sdl cmake emscripten
我正在尝试使用 CMake 将 C++ 项目编译为 webassembly。我正在使用 emscripten,我想使用 SDL2 和 Freetype 的 emscripten 端口。通常,当使用 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})
Run Code Online (Sandbox Code Playgroud)
它使用常规 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})
Run Code Online (Sandbox Code Playgroud)
使用此 cmake 文件,emcmake cmake .
成功运行,但随后make
抱怨找不到“SDL2/SDL.h”。
任何帮助将不胜感激。
我根据这个页面修复了这个问题:https : //github.com/emscripten-core/emscripten/issues/9259,
此页面:使用指定的 HTML 输出从 CMake 项目生成 Web 程序集,
和这个页面:Emscripten - cmake - 在 CMakeList 文件中传递 emscripten 选项
<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})
</code></pre>
Run Code Online (Sandbox Code Playgroud)
这使用 emscripten 编译,emcmake cmake . && make
并定期使用cmake . && make
.
我emcc
用这个欺骗安装了 zlib 端口:
emcc -s USE_ZLIB=1 $(mktemp)
Run Code Online (Sandbox Code Playgroud)
并emcmake cmake ..
开始为我工作。我打赌您应该能够使用 SDL 做同样的事情。
归档时间: |
|
查看次数: |
1421 次 |
最近记录: |