cmake编译通过EMSCRIPTEN_BINDINGS导出c函数的WebAssembly项目生成.js与.wasm文件,使用cmake3.0与c++11
时间: 2024-05-12 13:14:24 浏览: 312
首先,确保你的项目已经正确地链接了 Emscripten SDK。接下来,在 CMakeLists.txt 中添加以下内容:
```cmake
cmake_minimum_required(VERSION 3.0)
project(your_project)
# 设置编译选项
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# 添加 Emscripten 编译器
SET(CMAKE_C_COMPILER "emcc")
SET(CMAKE_CXX_COMPILER "em++")
# 添加 Emscripten 编译选项
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s WASM=1 -s USE_SDL=2 -s USE_WEBGL2=1 -s FULL_ES3=1 -s USE_GLFW=3")
# 添加源代码
add_executable(your_project main.cpp)
# 导出 C 函数为 JavaScript 模块
set_target_properties(your_project PROPERTIES LINK_FLAGS "-s EXPORTED_FUNCTIONS='[\"_your_c_function\"]' -s EXTRA_EXPORTED_RUNTIME_METHODS='[\"ccall\", \"cwrap\"]'")
# 指定输出文件名
set_target_properties(your_project PROPERTIES OUTPUT_NAME "your_project")
# 指定输出文件类型为 JavaScript 模块
set_target_properties(your_project PROPERTIES SUFFIX ".js")
# 拷贝输出文件到指定目录
add_custom_command(TARGET your_project POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:your_project> ${CMAKE_CURRENT_SOURCE_DIR}/output/)
```
以上代码做了以下几件事:
1. 设置编译选项,包括编译标准、编译器等等。
2. 添加 Emscripten 编译器和编译选项。
3. 添加源代码。
4. 导出 C 函数为 JavaScript 模块,这里的 `_your_c_function` 是你需要导出的函数名。
5. 指定输出文件名为 `your_project.js`。
6. 拷贝输出文件到指定目录。
最后,你可以通过以下命令来生成 WebAssembly 项目:
```bash
mkdir build && cd build
cmake ..
make
```
如果一切顺利,你将得到 `your_project.js` 和 `your_project.wasm` 两个文件,其中前者是 JavaScript 模块,后者是 WebAssembly 模块。
阅读全文