【发布时间】:2020-08-18 18:40:55
【问题描述】:
我正在尝试使用 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 进行编译,它给了我一个错误,说它找不到 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 的情况下,将始终在那里,因此不需要跨平台检查。
标签: c++ cmake port sdl emscripten