2013-06-12 103 views
9

使用支持構建多個操作系統的代碼庫時,只需要對Emscripten進行修改,將它們集成到相同的代碼庫中,只有在條件編譯的幫助下才能讓它在其他環境中繼續工作。如何有條件地編譯emscripten的代碼?

雖然這個主題似乎沒有任何文檔,但對我來說這似乎很差,我也不能找到任何關於它的問題,這對我來說似乎很令人驚訝 - 我預計它會被很好地踐踏和 - 文件化的領土。

我該怎麼做?

(我已經看過tools/shared.py,這似乎表明,#ifdef EMSCRIPTEN#ifdef __EMSCRIPTEN__可以使用,我還在問這個問題,以確定是否我是正確的,如果這是這樣做的正確的方式,甚至這應該使用)。

回答

4

#ifdef EMSCRIPTEN是首選的方式AFAIK。

在使用#ifdef s混淆源代碼之前,請考慮是否讓某些依賴平臺的文件變得更有意義並讓構建工具完成工作。

另外,emscripten已經定義了LINUX,因爲它很像Linux系統。通常這種行爲已經修復了平臺處理的大部分需求。

2

這是我目前的解決方案:

  • 我有一個普通的靶子一個Linux的Makefile,它連接之前生成的靜態庫和輸出的可執行文件。

  • 該代碼作用於使用ifdefs定義的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擴展庫。

相關問題