2013-03-02 7 views
12

Ich versuche, ein einfaches plattformübergreifendes C++ - Projekt mit Gyp zu erstellen. Momentan probiere ich das nur auf einem Mac aus - aber ich würde es gerne für Windows, Linux, iOS und Android erstellen. HEre ist die einfache gyp-Datei, die ich benutze. Ich möchte ninja sowie xcode/msvc-Projekte von diesem gyp verwenden können. Ich weiß, dass ich
-std = C++ 11 und -libstdC++ zur Befehlszeile für clang hinzufügen kann, aber im Moment sehe ich nur die generierten Build-Dateien mit g ++ anstelle von clang.mit C++ 11 mit GYP-Projekt

Das ist meine gyp-Datei.

 { 
     'targets': [ 

      { 
      'target_name': 'libtest', 
      'product_name': 'test', 
      'type': 'static_library', 
      'sources': [ 
       './src/lib.cpp', 
      ], 
      'include_dirs': [ 
       'include', 
      ], 
      }, 

      { 
      'target_name': 'testapp', 
      'type': 'executable', 
      'sources': [ 
       './test/test.cpp', 
      ], 
      'include_dirs': [ 
       'src', 
      ], 
      'dependencies': [ 
       'libtest' 
      ], 
      }, 
     ], 
     } 

Antwort

7

Ich habe das bis zu einem gewissen Grad irgendwie herausgefunden. Zu guter Letzt habe ich es auf dem Mac für einen Makefile Build (nicht Ninja, was meine ursprüngliche Hoffnung war).

Zuerst musste ich Gyp dazu bringen, clang anstelle von g ++ zu verwenden, dazu musste ich make_global_settings zur gyp-Datei hinzufügen. Dies scheint kein guter Plan für einen plattformübergreifenden Build zu sein. Ich konnte diese auch mit Umgebungsvariablen einstellen, ich vermute ich kann wohl etwas mit Bedingungen machen, um das spezifisch auf den Mac zu machen.

'make_global_settings': [ 
    ['CXX','/usr/bin/clang++'], 
    ['LINK','/usr/bin/clang++'], 
    ], 
    'targets': 
    [ 
    ...... 

Das andere, was ich tun musste, war hinzufügen ein xcode_settings Wörterbuch mit OTHER_CPLUSPLUSFLAGS und OTHER_LDFLAGS auf dem Zieltyp abhängig. Vollständiges Beispiel unten.

+2

Haben Sie 'clang: error: ungültiges Implementierungsziel für -stdlib = libC++ (benötigt OS X 10.7 oder höher)' überhaupt? – drewish

+0

Ich bin gerade in das geraten. Ich konnte es noch nicht herausfinden. Unter OSX 10.10. – johnhaley81

1

Also habe ich gerade dies auf dem Klang ++ 6 OSX 10.10 versucht und ich lief in das gleiche Problem, dass drawish Hit.

Hinzufügen von -mmacosx-version-min=10.7 zu den OTHER_CPLUSPLUSFLAGS und OTHER_LDFLAGS Arrays behoben das Problem.

EDIT

Eine noch bessere Möglichkeit, dass ich dieses Problem beheben gefunden ist "MACOSX_DEPLOYMENT_TARGET": "10.7" in die xcode_settings Array hinzuzufügen. Dies überschreibt alle Standardeinstellungen, die der Knoten in der Datei common.gypi festlegt.

So sollte es in etwa so aussehen

{ 
    'targets': [ 
    { 
     'target_name': 'myApp', 
     'sources': [ 'myApp.cc' ] 
     'conditions': [ 
     ['OS=="mac"', { 
      'xcode_settings': { 
      'MACOSX_DEPLOYMENT_TARGET': '10.7' 
      } 
     }] 
     ] 
    } 
    ] 
} 
0

johnhaley81 Lösung ist wirklich die einfachste diese Arbeit zu bekommen (zumindest auf OSX), aber ich noch ein paar Einstellungen hinzuzufügen hatte:

"conditions": [ 
    [ 'OS=="mac"', { 
     "xcode_settings": { 
     'MACOSX_DEPLOYMENT_TARGET': '10.9', 
     "CLANG_CXX_LIBRARY": "libc++", 
     "GCC_ENABLE_CPP_RTTI": "YES", 
     "GCC_ENABLE_CPP_EXCEPTIONS": "YES" 
     }, 
    }], 
    ], 

Wie Sie sehen können, können Sie hier direkt die Name/Wert-Paare aus einem XCode-Projekt verwenden. Ziemlich praktisch.

0

Die bisherigen Antworten waren hilfreich, aber alles, was xcode_settings tatsächlich hinzugefügt werden müssen, sind 'MACOSX_DEPLOYMENT_TARGET': '10.7' und 'CLANG_CXX_LIBRARY': 'libc++'

{ 
    'targets': [ 
    { 
     'target_name': 'myApp', 
     'sources': [ 'myApp.cc' ] 
     'conditions': [ 
     ['OS=="mac"', { 
      'xcode_settings': { 
      'MACOSX_DEPLOYMENT_TARGET': '10.7', 
      'CLANG_CXX_LIBRARY': 'libc++' 
      } 
     }] 
     ] 
    } 
    ] 
} 

Insbesondere die Option 'CLANG_CXX_LIBRARY': 'libc++' ist das, was uns immer ist das, was wir wollen.Wenn Sie diese Option hinzufügen ohne'MACOSX_DEPLOYMENT_TARGET': '10.7' dann könnten Sie die folgenden Fehler anzeigen:

clang: error: invalid deployment target for -stdlib=libc++ (requires OS X 10.7 or later) 

Dieser Fehler zeigt an, dass 10.7 ist ein geeigneterer Wert als 10.9 für MACOSX_DEPLOYMENT_TARGET, wenn Sie in der Kompatibilität interessiert sind.