• <abbr id="chdyf"></abbr>
    <ruby id="chdyf"><acronym id="chdyf"><meter id="chdyf"></meter></acronym></ruby>
    <bdo id="chdyf"></bdo>
    <dfn id="chdyf"><menu id="chdyf"></menu></dfn>
    1. <menuitem id="chdyf"></menuitem><strong id="chdyf"><menu id="chdyf"></menu></strong>

      <rt id="chdyf"><menu id="chdyf"></menu></rt>
      成人小说一区二区三区,伊人精品成人久久综合全集观看,久久HEZYO色综合,中文字幕精品人妻熟女,影音先锋成人网站,我要看免费一级毛片,中国女人做爰A片,中文字幕av久久爽Av

      Emscripten教程之emcc編譯命令

      2020-4-14    seo達(dá)人

      語(yǔ)法


      emcc [options] file ...

      這個(gè)輸入文件file,既可以是clang可以編譯的C/C++語(yǔ)言,也可以是二進(jìn)制形式的llvm bitcode或者人類可讀形式的llvm assembly文件。

      參數(shù)

      大部分clang或者gcc的選項(xiàng)(option)都是可以工作的,比如:

      # 顯示信息 emcc --help # 顯示編譯器版本信息 emcc --version

      如果想看當(dāng)前Emscripten中clang版本支持的全部選項(xiàng)列表,可以直接使用命令:
      clang --help.

      emcc修改的或者emcc中新的選項(xiàng)列在下面:

      首先是一些編譯優(yōu)化flag,它們-O0,-O1,-O2,-Os,-Oz,-O3。

      -O0:
      不進(jìn)行編譯優(yōu)化(這是默認(rèn)情況)。當(dāng)你剛開(kāi)始移植項(xiàng)目是推薦使用它,因?yàn)樗鼤?huì)包含許多斷言。

      -O1:
      簡(jiǎn)單優(yōu)化。推薦你在既想縮短編譯時(shí)間又想編譯優(yōu)化時(shí)使用。它畢竟比-O2級(jí)別的優(yōu)化編譯起來(lái)快多了。它會(huì)進(jìn)行asm.js和llvm的-O1進(jìn)行優(yōu)化,它會(huì)relooping,會(huì)刪除運(yùn)行時(shí)斷言和C++異常捕獲,它也會(huì)使得-s ALIASING_FUNCTION_POINTERS=1。

      想要C++異常捕獲重新可用,請(qǐng)?jiān)O(shè)置:-s DISABLE_EXCEPTION_CATCHING=0。

      -O2:
      和-O1類似,不過(guò)多了JavaScript級(jí)別的優(yōu)化以及一些llvm -O3的優(yōu)化項(xiàng)。當(dāng)你想發(fā)布項(xiàng)目的時(shí)候,推薦使用本級(jí)別優(yōu)化。

      -O3:
      和-O2類似,不過(guò)比-O2又多了一些JavaScript優(yōu)化,而且編譯時(shí)間明顯比-O2長(zhǎng)。這個(gè)也推薦在發(fā)布版本的時(shí)候使用。

      -Os:
      和-O3類似,不過(guò)增加了額外的優(yōu)化以減小生成的代碼體積,代價(jià)是比-O3性能差一點(diǎn)。-Os優(yōu)化會(huì)同時(shí)影響llvm bitcode 和JavaScript文件的生成。

      -Oz:
      和-Os類似,不過(guò)進(jìn)一步減小了代碼體積。

      -s OPTION=VALUE
      傳給編譯器的所有涉及到JavaScript代碼生成的選項(xiàng)。選項(xiàng)列表,請(qǐng)見(jiàn)settings.js

      對(duì)于某個(gè)選項(xiàng)的值,不僅可以直接在emcc命令行里面設(shè)定,也可以把他們寫(xiě)成json文件。比如下面,就是將DEAD_FUNCTIONS選項(xiàng)的值放到了path/to/file文件里,emcc里面?zhèn)鬟@個(gè)文件的路徑。

      -s DEAD_FUNCTIONS=@/path/to/file
      note: 1、文件內(nèi)容可以是:["_func1","_func2"]; 2、文件路徑必須是絕對(duì)的,不能是相對(duì)的。

      -g:
      這是保留調(diào)試信息flag。

      • 如果只是編譯到bitcode,那就和clang和gcc中的-g一樣。
      • 如果是要編譯到JavaScript,-g就等于-g3。

      -g<level>
      控制打印的調(diào)試信息數(shù)量,每一個(gè)level都是在前一個(gè)level的基礎(chǔ)上編譯的:

      • -g0:不保留調(diào)試信息。
      • -g1:保留空格,不壓縮。
      • -g2:保留函數(shù)名。
      • -g3:保留變量名,與-g同。變量名一般不是必須編譯后保留的,但是如果保留了,可以推斷變量的目的,對(duì)吧。
      • -g4:保留llvm 調(diào)試信息,這是能調(diào)試的最高級(jí)別。
      note:
      優(yōu)化級(jí)別越高,編譯時(shí)間越長(zhǎng)

      --profiling:

      --profiling-funcs:

      --tracing:
      啟用Emscripten的tracing API。

      --emit-symbol-map:

      --js-opts<level>:
      允許JavaScript優(yōu)化,有兩個(gè)值:
      0:不允許JavaScript優(yōu)化器允許;
      1:使用JavaScript優(yōu)化器。
      通常用不到我們?cè)O(shè)置這一項(xiàng), 因?yàn)樵O(shè)置-O后面的level的時(shí)候,這個(gè)項(xiàng)就能順便取到一個(gè)合適的值。

      note:
      有些選項(xiàng)會(huì)重寫(xiě)這個(gè)flag的值,比如EMTERPRETIFY, DEAD_FUNCTIONS, OUTLINING_LIMIT, SAFE_HEAP 和 SPLIT_MEMORY會(huì)將js-opts=1,因?yàn)樗麄円蕾噅s優(yōu)化器。

      --llvm-opts<level>:
      啟用llvm優(yōu)化。它的取值有有:

      • 0:不使用llvm優(yōu)化
      • 1:llvm -O1優(yōu)化
      • 2:llvm -O2優(yōu)化
      • 3:llvm -O3優(yōu)化

      和--js-opts<level>一樣,通常用不到我們?cè)O(shè)置這一項(xiàng), 因?yàn)樵O(shè)置-O后面的level的時(shí)候,這個(gè)項(xiàng)就能順便取到一個(gè)合適的值。

      --llvm-lto<level>:
      啟用llvm 連接時(shí) 優(yōu)化。可以取值0,1,2,3。

      --closure <on>:
      運(yùn)行壓縮編譯器(Closure Compiler),可能的取值有,0,1,2:

      • 0:是不啟用壓縮編譯器。
      • 1:?jiǎn)⒂谩?
      • 2:?jiǎn)⒂谩?

      --pre-js <file>
      生成代碼前,指定一個(gè)要把內(nèi)容添加進(jìn)來(lái)的文件。

      --post-js <file>
      生成代碼后,指定一個(gè)要把內(nèi)容添加進(jìn)來(lái)的文件。

      --embed-file <file>
      指定一個(gè)帶路徑的文件嵌入到編譯生成的js代碼里。路徑是相對(duì)于編譯時(shí)的當(dāng)前路徑。如果傳的是一個(gè)目錄,則目錄下所有文件的內(nèi)容都會(huì)被嵌入到將來(lái)生成的js代碼中。

      --preload-file <name>
      異步運(yùn)行編譯代碼前,指定一個(gè)預(yù)加載的文件。路徑是相對(duì)于編譯時(shí)的當(dāng)前路徑。如果傳的是一個(gè)目錄,則目錄下所有文件的內(nèi)容都會(huì)被預(yù)加載到一個(gè).data文件中。

      --exclude-file <name>
      從 –embed-file and –preload-file后面的目錄中排除一些文件,支持使用通配符*。

      --use-preload-plugins
      告訴文件打包器當(dāng)文件加載時(shí),運(yùn)行預(yù)加載插件。它用來(lái)執(zhí)行諸如使用瀏覽器解碼器解碼圖片和音頻等。

      --shell-file <path>
      指定要生成HTML的模板文件。

      --source-map-base <base-url>

      --minify 0
      等于-g1。

      --js-transform <cmd>
      優(yōu)化之前,生成代碼之后,設(shè)定這一條命令。這條命令可以讓你修改JavaScript代碼。之后,編譯器會(huì)將修改的和未修改的一起進(jìn)行編譯優(yōu)化。

      --bind
      啟用bingdings編譯源代碼。bingings是Emscripten中連接C++和JavaScript代碼的一類API。

      --ignore-dynamic-linking
      告訴編譯器忽視動(dòng)態(tài)鏈接,之后用戶就得手動(dòng)鏈接到共享庫(kù)。

      --js-library <lib>
      定義除了核心庫(kù)(src/library_*)以外的js庫(kù)。

      -v
      打開(kāi)詳細(xì)輸出。
      這個(gè)設(shè)置為把-v傳給clang,并且啟用EMCC_DEBUG生成編譯階段的中間文件。它也會(huì)運(yùn)行Emscripten關(guān)于工具鏈的內(nèi)部的完整性檢查。

      tip: emcc -v是診斷錯(cuò)誤的有用工具,不管你是否附加其他參數(shù)。

      --cache

      --clear-cache

      --clear-ports

      --show-ports

      --save-bc PATH

      --memory-init-file <on>
      規(guī)定是否單獨(dú)生成一個(gè)內(nèi)存初始化文件。取值包括0和1.

      • 0:不單獨(dú)生成.mem文件。
      • 1:?jiǎn)为?dú)生成.mem文件。

      -Wwarn-absolute-paths
      啟用在-I和-L命令行指令中使用絕對(duì)路徑的警告。這是用來(lái)警告無(wú)意中使用了絕對(duì)路徑的。在引用非可移植的本地系統(tǒng)頭文件時(shí),使用絕對(duì)路徑有時(shí)是很危險(xiǎn)的。

      --proxy-to-worker

      --emrun
      使生成的代碼能夠感知emrun命令行工具。當(dāng)運(yùn)行emran生成的應(yīng)用程序時(shí),這樣設(shè)置就允許stdout、stderr和exit(returncode)被捕獲。

      --cpuprofiler
      在生成的頁(yè)面上嵌入一個(gè)簡(jiǎn)單的CPU分析器。使用這個(gè)來(lái)執(zhí)行粗略的交互式性能分析。

      --memoryprofiler
      在生成的頁(yè)面上嵌入內(nèi)存分配跟蹤器,使用它來(lái)分析應(yīng)用程序Emscripten堆的使用情況。

      --threadprofiler
      在生成的頁(yè)面上嵌入一個(gè)線程活動(dòng)分析器。當(dāng)進(jìn)行多線程編譯時(shí),使用它來(lái)分析多線程應(yīng)用程序。
      --em-config

      --default-obj-ext .ext

      --valid-abspath path
      設(shè)置一個(gè)絕對(duì)路徑的白名單,以防止關(guān)于絕對(duì)路徑的警告。

      -o <target>
      編譯輸出的文件格式。target可以取值為:

      • name.js:JavaScript文件;
      • name.html:HTML+js文件。把js單獨(dú)生成是為了減小頁(yè)面加載時(shí)間。
      • name.bc:llvm bitcode。這是默認(rèn)值。
      • name.o:和上面一樣。
      note:
      如果你用了--memory-init-file,則還會(huì)從js文件中再單獨(dú)分出一部分代碼為.mem文件。

      -c
      生成llvm bitcode代碼,而不是JavaScript。

      --separate-asm
      把a(bǔ)sm.js文件單獨(dú)生成到一個(gè)文件中。這樣可以減少啟動(dòng)時(shí)的內(nèi)存加載。

      --output_eol windows|linux
      規(guī)定生成的文本文件的行尾,如果是–output_eol windows,就是windows rn行尾,如果是–output_eol linux,則生成Linux行尾的文本文件。

      --cflags

      環(huán)境變量


      emcc會(huì)受到幾個(gè)環(huán)境變量的影響,如下:

      • EMMAKEN_JUST_CONFIGURE
      • EMMAKEN_JUST_CONFIGURE_RECURSE
      • EMCONFIGURE_JS
      • EMCONFIGURE_CC
      • EMMAKEN_CXX
      • EMMAKEN_COMPILER
      • EMMAKEN_CFLAGS
      • EMCC_DEBUG

      這幾個(gè)里面比較有意思的是EMCC_DEBUG。比如,如果你在編譯之前設(shè)置set EMCC_DEBUG=1,那么編譯的時(shí)候會(huì)把編譯過(guò)程的調(diào)試信息和編譯各個(gè)階段的中間文件輸出到一個(gè)臨時(shí)目錄,這算是給開(kāi)發(fā)者提供一些編譯期間的幫助或者說(shuō)調(diào)試信息吧。


      Emscripten主題系列文章是emscripten中文站點(diǎn)的一部分內(nèi)容。
      第一個(gè)主題介紹代碼可移植性與限制
      第二個(gè)主題介紹Emscripten的運(yùn)行時(shí)環(huán)境
      第三個(gè)主題第一篇文章介紹連接C++和JavaScript
      第三個(gè)主題第二篇文章介紹embind
      第四個(gè)主題介紹文件和文件系統(tǒng)
      第六個(gè)主題介紹Emscripten如何調(diào)試代碼

      日歷

      鏈接

      個(gè)人資料

      存檔

      主站蜘蛛池模板: 中国国产一级毛片视频| 亚洲V色| 南昌县| 中文字幕av久久爽Av| 欧美成人免费看片一区| 午夜无码A级毛片免费视频| 三级网站在线免费观看| 熟女一区| 91大神在线免费观看| 一本色道久久88综合日韩精品| 亚洲美女av一区| 最新在线中文字幕| 内射自拍| 九九国产在线观看| 亚洲va韩国va欧美va| 久久av高潮av| 欧美顶级metart裸体自慰| 亚洲第一成年网| 日本一区二区不卡视频| 日本精品中文字幕在线观看| 一区二区三区视频| 色999亚洲人成色| www.jizzjizz| 大熟女在线| 色色成人网| 国产成人HD| av中文字幕免费| 亚洲日本激情| 国产精品国产自线拍免费| 亚洲国产精品久久人人爱| 凭祥市| 丝袜美腿在线观看播放一区| 伊人一二三四区| 国产精品视频区| 肉大榛一出一进免费观看| 黑人大战日本人妻嗷嗷叫| 亚洲天堂网在线观看视频| 精品久久久亚洲中文字幕| 欧美乱伦视频| 邹平县| vr虚拟专区亚洲精品二区|