首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在cmake中使用嵌入端口(SDL2和Freetype)

如何在cmake中使用嵌入端口(SDL2和Freetype)
EN

Stack Overflow用户
提问于 2020-05-04 18:51:42
回答 2查看 1.7K关注 0票数 5

我正在尝试使用CMake to webassembly编译一个C++项目。我正在使用emscripten,我想使用SDL2和Freetype的emscripten端口。通常,在使用emcc编译时,您将使用标志:-USE_SDL=2和-USE_FREETYPE=1,以便包含这些端口。然而,我不知道如何使用CMake来实现这一点。

这是我的CMakeList文件:

代码语言:javascript
复制
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标志:

代码语言:javascript
复制
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‘。

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2020-05-06 00:22:44

我基于这个页面修复了这个问题:https://github.com/emscripten-core/emscripten/issues/9259

此页面:Generate Web Assembly from CMake Project with a Specified HTML Output

还有这个页面:Emscripten - cmake - pass emscripten options in CMakeList file

代码语言:javascript
复制
<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>

这在emscripten中使用emcmake cmake . && make进行编译,并定期使用cmake . && make进行编译。

票数 7
EN

Stack Overflow用户

发布于 2022-01-09 05:57:06

我欺骗emcc安装了zlib port,如下所示:

代码语言:javascript
复制
emcc -s USE_ZLIB=1 $(mktemp)

然后emcmake cmake ..开始为我工作。我敢打赌,您应该能够用SDL做同样的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61590519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档