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