Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用c++;11与GYP项目合作 我试图用GYP创建一个简单的跨平台C++项目。目前,我只是在mac电脑上尝试这一点,但我希望它最终能够为windows、Linux、ios和android系统构建。 这是我正在使用的简单gyp文件。 我希望能够使用忍者以及这个gyp中的xcode/msvc项目。 我知道我需要能够添加 -std=c++11和-libstdc++到clang的命令行,但是现在我只看到使用g++而不是clang生成的构建文件_C++_C++11_Gyp - Fatal编程技术网

使用c++;11与GYP项目合作 我试图用GYP创建一个简单的跨平台C++项目。目前,我只是在mac电脑上尝试这一点,但我希望它最终能够为windows、Linux、ios和android系统构建。 这是我正在使用的简单gyp文件。 我希望能够使用忍者以及这个gyp中的xcode/msvc项目。 我知道我需要能够添加 -std=c++11和-libstdc++到clang的命令行,但是现在我只看到使用g++而不是clang生成的构建文件

使用c++;11与GYP项目合作 我试图用GYP创建一个简单的跨平台C++项目。目前,我只是在mac电脑上尝试这一点,但我希望它最终能够为windows、Linux、ios和android系统构建。 这是我正在使用的简单gyp文件。 我希望能够使用忍者以及这个gyp中的xcode/msvc项目。 我知道我需要能够添加 -std=c++11和-libstdc++到clang的命令行,但是现在我只看到使用g++而不是clang生成的构建文件,c++,c++11,gyp,C++,C++11,Gyp,这是我的gyp文件 { 'targets': [ { 'target_name': 'libtest', 'product_name': 'test', 'type': 'static_library', 'sources': [ './src/lib.cpp', ], 'in

这是我的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'
            ],
          },
        ],
      }

我在某种程度上已经明白了这一点。至少,我在mac上为makefile构建了它(而不是我最初希望的忍者)

首先,我必须让gyp使用clang而不是g++,为此,我必须向gyp文件添加make_global_设置。对于跨平台构建来说,这似乎不是一个好的计划。我还可以用环境变量设置这些,我猜我可能可以用条件做一些事情,使其特定于mac

'make_global_settings': [
    ['CXX','/usr/bin/clang++'],
    ['LINK','/usr/bin/clang++'],
  ],
  'targets': 
  [
    ......
我必须做的另一件事是添加一个xcode_设置字典,其中包含其他_CPLUSPLUSFLAGS和其他_LDFLAGS,具体取决于目标类型。下面是完整的示例

{

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

所以我只是在clang++6 OSX 10.10上尝试了这个,我遇到了drewish遇到的相同问题

-mmacosx version min=10.7
添加到
OTHER_CPLUSPLUSFLAGS
OTHER_LDFLAGS
数组中修复了该问题

编辑

我发现解决这个问题的一个更好的方法是在
xcode\u设置
数组中添加
“MACOSX\u部署\u目标”:“10.7”
。这将覆盖节点在其文件中设置的任何默认值

所以应该是这样的

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

johnhaley81的解决方案确实是最简单的解决方案(至少在OSX上),但是我不得不添加一些设置:

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

如您所见,您可以在这里直接使用XCode项目中的名称/值对。非常方便。

前面的答案很有帮助,但实际上必须添加到
xcode\u设置中的所有内容都是
'MACOSX\u部署\u目标':'10.7'
'clangu CXX\u库':'libc++'

{
  'targets': [
    {
      'target_name': 'myApp',
      'sources': [ 'myApp.cc' ]
      'conditions': [
        ['OS=="mac"', {
          'xcode_settings': {
            'MACOSX_DEPLOYMENT_TARGET': '10.7',
            'CLANG_CXX_LIBRARY': 'libc++'
          }
        }]
      ]
    }
  ]
}
具体地说,选项“CLANG_CXX_LIBRARY”:“libc++”
正是我们想要的。如果添加此选项时没有“MACOSX部署目标”:“10.7”,则可能会看到以下错误:

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

如果您对兼容性感兴趣,此错误表明
10.7
对于
MACOSX_部署_目标而言是比
10.9
更合适的值。

您是否遇到了
clang:error:invalid DEPLOYMENT TARGET for-stdlib=libc++(需要OS X 10.7或更高版本)
?我刚才遇到了这个问题。我还没弄明白。在OSX 10.10上。