我最近正在开展一个项目,其中包括 Emscripten 的使用。我可以在终端上安装并运行一些示例,但我想将其与 Clion 集成,以便我可以直接将 emscripten 包含到我的主项目中并构建它。我尝试将目录添加到CMakeList但在构建时出现错误。任何人都可以帮助我找到将 Emscripten 集成到 Clion 中的适当方法,或者对CMakeList. 任何帮助将不胜感激。感谢您宝贵的时间。
我将这些行包含在演示项目的 CMakeList 中:
\n\ncmake_minimum_required(VERSION 3.12)\n\nproject(projectShell)\n\nset(CMAKE_CXX_STANDARD 14)\nif (${CMAKE_SYSTEM_NAME} MATCHES "Emscripten")\nset(CMAKE_C_COMPILER "emcc")\nendif ()\ninclude_directories(include/rapidjson)\ninclude_directories(/home/myfastcomp/emscripten/emscripten/system/include \n)\nadd_executable(projectShell main.cpp library.cpp library.h)\nif (${CMAKE_SYSTEM_NAME} MATCHES "Emscripten")\nset_target_properties(projectShell PROPERTIES LINK_FLAGS "-o \ndist/projectShell.js -s USE_FREETYPE=1 -s DISABLE_EXCEPTION_CATCHING=0 -s DEMANGLE_SUPPORT=1 -s SAFE_HEAP=1 --bind -s WASM=1 -O2 -s LEGACY_GL_EMULATION=0 -s GL_UNSAFE_OPTS=0 --pre-js pre-module.js --post-js post-module.js -s ASSERTIONS=1 -s GL_ASSERTIONS=1 -s INVOKE_RUN=0 -std=c++11 -s USE_WEBGL2=1 -s FULL_ES3=1 -s USE_GLFW=3 -s OFFSCREENCANVAS_SUPPORT=1 --preload-file textures --preload-file shaders --preload-file …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 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 …Run Code Online (Sandbox Code Playgroud) 我想制作CMake和Emscripten的朋友.没有在Emscripten项目网站上找到更多或更少信息的文档,但他们提供了CMake工具链文件,所以我认为它应该是可能的.到目前为止,没有高级参数的基本编译工作正常,但我在使用embind和预加载文件时遇到了问题.
warning: unresolved symbol: _embind_register_class在rowser中加载编译的JS文件时会导致相应的错误..data编译期间不生成任何文件.我创建了一个简约的示例,其中包括两个目标:一个"普通"(客户端)和一个手动(手动客户端),它只是运行emcc,因为我希望它运行:https://github.com/xwaffelx/minimal -cmake-emscripten项目/ BLOB /主/ README.md
虽然手动方式有效,但我认为这不是一种正确的方法......
---更新---
根据要求,这里有更简短的例子:
cmake_minimum_required(VERSION 2.8)
cmake_policy(SET CMP0015 NEW)
project(emtest)
set(CMAKE_VERBOSE_MAKEFILE on)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build.emscripten)
include_directories("lib/assimp/include")
link_directories("lib/assimp/lib-js")
link_libraries("assimp")
file(GLOB_RECURSE CORE_HDR src/.h)
file(GLOB_RECURSE CORE_SRC src/.cpp)
add_definitions("-s DEMANGLE_SUPPORT=1 --preload-file ${CMAKE_SOURCE_DIR}/assets --bind")
add_executable(client ${CORE_SRC} ${CORE_HDR})
结果应该等同于手动运行以下命令:
emcc
-Ilib/assimp/include
-s DEMANGLE_SUPPORT=1
--preload-file assets
--bind
Application.cpp
lib/assimp/lib-js/libassimp.so
-o client.js
这是Application.cpp:
#include "Application.h"
#include <iostream>
#include <assimp/Importer.hpp>
#include <assimp/scene.h>
#include <assimp/postprocess.h>
void Application::Initialize() {
std::cout << …Run Code Online (Sandbox Code Playgroud)