12

gyp を使用して単純なクロスプラットフォーム C++ プロジェクトを作成しようとしています。現在、私はこれを Mac で試していますが、最終的には Windows、Linux、iOS、および Android 用にビルドしたいと考えています。HEre は、私が使用している単純な gyp ファイルです。この gyp の xcode/msvc プロジェクトだけでなく、ninja も使用できるようにしたいと考えています。
-std=c++11 と -libstdc++ を clang のコマンドラインに追加できるようにする必要があることはわかっていますが、現在、clang の代わりに g++ を使用して生成されたビルド ファイルしか表示されません。

これは私のgypファイルです。

      {
        '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'
            ],
          },
        ],
      }
4

4 に答える 4

8

これである程度わかってきました。少なくとも、makefile ビルドのために Mac で動作するようになりました (最初の希望であった忍者ではありません)。

まず、gyp で g++ の代わりに clang を使用する必要がありました。これを行うには、gyp ファイルに make_global_settings を追加する必要がありました。これは、クロスプラットフォーム ビルドの良い計画とは思えません。これらを環境変数で設定することもできました。おそらく、これを Mac に固有のものにする条件で何かを行うことができると思います。

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

私がしなければならなかったもう 1 つのことは、ターゲットの種類に応じて、OTHER_CPLUSPLUSFLAGS と OTHER_LDFLAGS を含む xcode_settings 辞書を追加することでした。以下の完全な例。

{

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

    {
      'target_name': 'mylib',
      'product_name': 'mylib',
      'type': 'static_library',
      'sources': [
        'src/implementation.cc',
      ],
      'include_dirs': [
         'include',
      ],
       'conditions': [
        [ 'OS=="mac"', {

          'xcode_settings': {
            'OTHER_CPLUSPLUSFLAGS' : ['-stdlib=libc++'],
            },

        }],
        ],
    },

    {
      'target_name': 'myapp',
      'type': 'executable',
      'sources': [
        './bin/myapp.cc',
      ],
      'conditions': [
        [ 'OS=="mac"', {

          'xcode_settings': {
            'OTHER_CPLUSPLUSFLAGS' : ['-std=c++11','-stdlib=libc++'],
            'OTHER_LDFLAGS': ['-stdlib=libc++'],
            },

        }],
      ],
      'include_dirs': [
         'include',
      ],
      'dependencies': [
        'mylib'
      ],
    },
  ],
}
于 2013-03-05T06:28:20.060 に答える
1

だから私はclang ++ 6 OSX 10.10でこれを試したところ、同じ問題に遭遇しました。

および配列に追加-mmacosx-version-min=10.7すると、問題が修正されました。OTHER_CPLUSPLUSFLAGSOTHER_LDFLAGS

編集

これを修正するために私が見つけたさらに良い方法は"MACOSX_DEPLOYMENT_TARGET": "10.7"xcode_settings配列に追加することです。これにより、Node がcommon.gypiファイルに設定するデフォルトが上書きされます。

したがって、次のようになります

{
  'targets': [
    {
      'target_name': 'myApp',
      'sources': [ 'myApp.cc' ]
      'conditions': [
        ['OS=="mac"', {
          'xcode_settings': {
            'MACOSX_DEPLOYMENT_TARGET': '10.7'
          }
        }]
      ]
    }
  ]
}
于 2014-10-19T04:29:24.133 に答える