我想使用CMake将一个C++项目编译成webassembly。我使用emscripten并希望使用emscripten的SDL2和Freetype端口。通常,使用emcc编译时,要使用以下标志:
这是我的CMakeList文件:
使用这个CMake文件,
-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 始终 存在,因此无需进行跨平台检查。 - cajomar