15

複数のオペレーティング システムのビルドをサポートするコードベースで作業する場合、Emscripten 用の変更が必要な場合にのみ、それらを同じコードベースに統合し、条件付きコンパイルの助けを借りて、他の環境でも引き続き動作できるようにすることが賢明です。

ただし、このトピックに関するドキュメントはないようです。これは私には非常に貧弱に思えます。また、それについての質問を見つけることもできません。これは私にとって非常に驚くべきことです。 .

これどうやってするの?

(私は見ました、これはまたは使用できるtools/shared.pyことを示唆しているようです。私はまだこの質問をして、私が正しいかどうか、これが正しい方法であるかどうか、おそらくどちらを使用する必要があるかを判断しています。)#ifdef EMSCRIPTEN#ifdef __EMSCRIPTEN__

4

3 に答える 3

15

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

2016 年 10 月に、厳密なビルド モードが導入されました。これを有効にすると、定義が削除されEMSCRIPTENます。したがって、非厳密なビルド モードでも機能しますが、使用することはお勧めしません。EMSCRIPTEN

于 2017-01-06T14:54:43.480 に答える
5

#ifdef EMSCRIPTEN私の知る限り、好ましい方法です。

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

また、emscriptenLINUXは、Linux システムと非常によく似た処理を行うため、既に を定義しています。通常、この動作により、プラットフォーム処理の必要性のほとんどが既に解決されています。

于 2013-06-12T15:56:50.067 に答える
2

これは私の現在の解決策です:

  • 通常のターゲットを持つLinux Makefileがあります。以前に生成された静的ライブラリをリンクし、実行可能ファイルを出力します。

  • このコードは、ifdefs を使用した WEB 定義に基づいて動作します。

  • ライブラリの Makefile は、プラットフォーム固有のソースの TARGET 環境変数に作用します。

    ifeq ($(TARGET),WEB)
        モジュール = RenderingEngine2.o RenderingEngine1.o WebApp.o main.o
    そうしないと
        モジュール = RenderingEngine2.o RenderingEngine1.o LinuxApp.o main.o
    終了
  • Makefile に沿って、次の内容の emscripten.sh と呼ばれる bash スクリプトがあります。
    #!/ビン/バッシュ

    make TARGET="WEB" CXX="em++ -DWEB" AR="emar" モジュール
    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 は静的ライブラリの .a 拡張子を好まないようですので、ライブラリに .o 拡張子を付けてください。

于 2013-06-16T10:30:39.237 に答える