如何设置基本的 C++/C 编译,然后为 emscripten 构建链接脚本
Posted
技术标签:
【中文标题】如何设置基本的 C++/C 编译,然后为 emscripten 构建链接脚本【英文标题】:How do I set up a basic C++/C compile, and then link script for emscripten builds 【发布时间】:2018-11-03 16:16:45 【问题描述】:这个测试是为了准备编写一个更成熟的构建模块。但我需要先了解基础知识。渴望: - 将所有“目标文件”输出构建到输出文件夹 - 将它们链接到可分发的“wasm”二进制文件并格式化 html 页面 并将它们输出到“dist”文件夹。
我查看了以下手册:
https://kripken.github.io/emscripten-site/docs/tools_reference/emcc.html
它不像人们想要的那样直观或明确说明。 下面是我当前的简单测试版本。
#!/bin/bash
# set emscripten toolchain paths in this shell
source "$HOME/emsdk/emsdk_env.sh" --build=Release
BuildDir="./build" # root of output dir for built files
SrcDir="./src" # a source code directory
ObjDir="$BuildDir/obj" # where intermediate "object" files are output to.
IncludeDir="./include" # an include directory
# start clean for this test
rm -fr "$BuildDir"
mkdir -p "$ObjDir" # also re-creates BuildDir
# compile source code out to ObjDir
emcc --default-obj-ext .bc -o "$ObjDir/" -I "$IncludeDir" \
"$SrcDir/hello.cpp" "$SrcDir/TestClass.cpp"`
运行上面的代码会出错,但如果只有一个源文件,则可以工作。
Is a directory
Traceback (most recent call last):
File "/home/peterk/emsdk/emscripten/incoming/emcc.py", line 3107, in <module>
...
status 1
peterk@5a4a702ca3b5:~/didi-wasmtest/test$
以下工作,但将所有输出文件放在 src/ 文件夹中,并为它们分配 .o 后缀而不是 .bc 后缀:它还在目录中输出 .out.js 和 .out.wasm 文件脚本从运行。我想抑制这种情况,直到最终的“链接”阶段,几个编译的结果将在一个单独的步骤中链接在一起。
emcc --default-obj-ext .bc -I "$IncludeDir" \
"$SrcDir/hello.cpp" "$SrcDir/TestClass.cpp"`
【问题讨论】:
【参考方案1】:好的 - 这很好,因为 makefile 无论如何都会一次编译一个。
#!/bin/bash
source "$HOME/emsdk/emsdk_env.sh" --build=Release # set emscripten toolchain paths in this shell
BuildDir="./build" # root of output dir for built files
SrcDir="./src" # a source code directory
ObjDir="$BuildDir/obj" # where intermediate "object" files are output to.
IncludeDir="./include" # an include directory
DistDir="./build/dist" # distribution "binary" output dir
# start clean for this test
rm -fr "$BuildDir"
# compile source code out to ObjDir
mkdir -p "$ObjDir"
objFiles=""
for srcFile in "$SrcDir"/*.cpp; do
objFile="$ObjDir/$(basename "$srcFile").bc"
emcc -o "$objFile" -I "$IncludeDir" "$srcFile"
objFiles+="$objFile " # save list of objFiles for link.
done
# link object files into binary runtime in DistDir
mkdir -p "$DistDir"
emcc -s WASM=1 $objFiles -o "$DistDir/hello.html"
# expose to browser to test
cd "$DistDir"
python -c 'import SimpleHTTPServer; SimpleHTTPServer.test()'
【讨论】:
也许你可以帮助我 Mr.Peter 在:***.com/questions/58198388/… 谢谢 - 目前我已将它完全集成到我与 CLion IDE 一起使用的基于 Ruby 的构建系统中 - 谢谢!以上是关于如何设置基本的 C++/C 编译,然后为 emscripten 构建链接脚本的主要内容,如果未能解决你的问题,请参考以下文章