использование c ++ 11 с проектом GYP

Я пытаюсь создать простой кроссплатформенный проект C ++ с помощью GIP. В настоящее время я просто пробую это на Mac — но хотел бы получить его для Windows, Linux, IOS и Android в конце концов.
Вот простой файл GYP, который я использую.
Я хотел бы иметь возможность использовать ниндзя, а также проекты xcode / msvc из этого гипа.
Я знаю, что мне нужно иметь возможность добавлять
-std = c ++ 11 и -libstdc ++ для командной строки для clang, но сейчас я вижу только сгенерированные файлы сборки, используя g ++ вместо clang.

Это мой файл.

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

12

Решение

Я в некоторой степени понял это. По крайней мере, я получил его на Mac для сборки make-файла (не ниндзя, который был моей первоначальной надеждой).

Сначала я должен был заставить gyp использовать clang вместо g ++, чтобы сделать это, я должен был добавить make_global_settings в файл gyp как таковой. Это не похоже на хороший план для кроссплатформенной сборки. Я также смог установить их с помощью переменных среды, наверное, я могу что-то сделать с условиями, чтобы сделать это специфичным для Mac.

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

Еще я должен был добавить словарь xcode_settings с OTHER_CPLUSPLUSFLAGS и OTHER_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'
],
},
],
}
8

Другие решения

Так что я только что попробовал это на clang ++ 6 OSX 10.10 и столкнулся с той же проблемой, что и дрюш.

Добавление -mmacosx-version-min=10.7 к OTHER_CPLUSPLUSFLAGS а также OTHER_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'
}
}]
]
}
]
}
1

Решение 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. Довольно удобно.

0

Предыдущие ответы были полезны, но все, что нужно добавить xcode_settings являются 'MACOSX_DEPLOYMENT_TARGET': '10.7' а также '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++'
}
}]
]
}
]
}

В частности, вариант 'CLANG_CXX_LIBRARY': 'libc++' это то, что дает нам то, что мы хотим. Если вы добавите эту опцию без 'MACOSX_DEPLOYMENT_TARGET': '10.7' тогда вы можете увидеть следующую ошибку:

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

Эта ошибка указывает на то, что 10.7 является более подходящим значением, чем 10.9 за MACOSX_DEPLOYMENT_TARGET если вы заинтересованы в совместимости.

0
По вопросам рекламы [email protected]