2013-06-12 4 views
9

複数のオペレーティングシステム用のビルドをサポートするコードベースで作業する場合、条件付きコンパイルの助けを借りてEmscriptenを変更する必要がある場合のみ、同じコードベースに統合することが賢明です。emscriptenのコードを条件付きでコンパイルするにはどうしたらいいですか?

私は非常に貧しいと思われるトピックに関するドキュメントはないようですが、私はそれに疑問を感じることもありません。私は非常に驚くようですおよび文書化された領域。

どうすればいいですか?

(私はtools/shared.pyを見てきました、これは#ifdef EMSCRIPTENまたは#ifdef __EMSCRIPTEN__を使用することができることを示唆しているようだ。私は正しいだ場合、私はまだ決定するために、この質問を聞いてるのよ、これはそれを行うための正しい方法であれば、おそらく)を使用する必要があります。

答えて

8

Detecting Emscripten in preprocessorによれば、使用する正しい定義は__EMSCRIPTEN__です。

2016年10月、a strict build mode was introduced有効にすると、EMSCRIPTENの定義が削除されます。したがって、非厳密なビルドモードでも動作するにもかかわらず、EMSCRIPTENを使用することをお勧めしますが、ではなく、が推奨されます。

4

#ifdef EMSCRIPTENは、AFAIKを推奨します。

ソースコードを#ifdefで乱雑にする前に、プラットフォームに依存する特定のファイルを作成し、ビルドツールで作業させるのは意味がないかどうかを考えてください。

また、emscriptenは、Linuxシステムと非常によく似ているため、すでにLINUXを定義しています。通常、この動作はプラットフォームの処理の必要性の大部分を修正しています。

2

これは私の現在のソリューションです:

  • 私はいつもの対象とLinuxのMakefileを持って、それが以前に生成された静的ライブラリをリンクし、実行可能ファイルを出力します。

  • コードはifdefでWEB定義に作用します。

  • Makefileのプラットフォーム固有の情報源のTARGET的環境変数時にライブラリの行為のために:

 
    ifeq ($(TARGET),WEB) 
     MODULES = RenderingEngine2.o RenderingEngine1.o WebApp.o main.o 
    else 
     MODULES = RenderingEngine2.o RenderingEngine1.o LinuxApp.o main.o 
    endif 
  • のMakefileに伴い、以下の内容でemscripten.shと呼ばれるbashスクリプトがあります:
 
    #!/bin/bash 

    make TARGET="WEB" CXX="em++ -DWEB" AR="emar" modules 
    make TARGET="WEB" CXX="em++ -DWEB" AR="emar" 
    emcc --preload-file assets -o bin/helloArrow.html bin/helloArrow bin/lib.o 
    firefox bin/helloArrow.html 
  • コンパイルと./emscripten.sh

注意して実行します。emscriptenはそうあなたの.o拡張子を持つライブラリーに名前を付ける静的ライブラリでは.a拡張子が好きなようではありません。

関連する問題