将.cpp文件编译为Objective-C++;在构建Node.js/Node-webkit插件时通过binding.gyp 我有一个预先存在的C++静态库,我将它移植为NoDE.js/NothWebKIT的插件。为了构建这个插件,我在我创建的binding.gyp文件上运行node gyp/nw gyp。此静态库是多平台的,分别通过VisualStudio、Xcode和CMake为Windows、Mac和Linux编译。这个静态库已经在各种应用程序中使用(请阅读,它可能不会仅针对这一个插件编译案例进行重构,它仍处于概念验证阶段) 所有的跨平台C++文件都有.CPP文件扩展名,即使其中一些实际上是在Mac上编译为Objto-C++(以便利用一些可可细节)。在Xcode上,我可以通过将文件的“类型”从“默认-C++源”转换为“文件检查器”中的“ObjuleC++源”来编译这样的.CPP文件作为ObjtoVC++。这是方便的,因为我能够在C++上在Windows /Linux和Mac上的Obj-C++上编译自己的相同文件,而不管.CPP文件扩展名。为了构建插件,我使用ObjectWrap范例。为了包装Objective-C++类,我必须包含它们的.h文件,这迫使Objective-C++场景处于加载项级别

将.cpp文件编译为Objective-C++;在构建Node.js/Node-webkit插件时通过binding.gyp 我有一个预先存在的C++静态库,我将它移植为NoDE.js/NothWebKIT的插件。为了构建这个插件,我在我创建的binding.gyp文件上运行node gyp/nw gyp。此静态库是多平台的,分别通过VisualStudio、Xcode和CMake为Windows、Mac和Linux编译。这个静态库已经在各种应用程序中使用(请阅读,它可能不会仅针对这一个插件编译案例进行重构,它仍处于概念验证阶段) 所有的跨平台C++文件都有.CPP文件扩展名,即使其中一些实际上是在Mac上编译为Objto-C++(以便利用一些可可细节)。在Xcode上,我可以通过将文件的“类型”从“默认-C++源”转换为“文件检查器”中的“ObjuleC++源”来编译这样的.CPP文件作为ObjtoVC++。这是方便的,因为我能够在C++上在Windows /Linux和Mac上的Obj-C++上编译自己的相同文件,而不管.CPP文件扩展名。为了构建插件,我使用ObjectWrap范例。为了包装Objective-C++类,我必须包含它们的.h文件,这迫使Objective-C++场景处于加载项级别,c++,node.js,objective-c++,node-webkit,node-gyp,C++,Node.js,Objective C++,Node Webkit,Node Gyp,我对使用节点gyp和nw gyp相当陌生。是否有其他限定符可以添加到binding.gyp文件中,以明确表示给定的.cpp文件实际上应编译为Objective-C++,类似于我上面提到的Xcode中的“type”设置?作为建立概念证明的过渡步骤,我成功地获得了.mm文件,并将其编译为Objective-C++。然而,正如上面提到的,这些文件中的许多实际上是多平台的,一旦我把概念证明移到其他平台上,就应该编译成直的C++。因此我更希望他们保留.CPP文件扩展名。 < P>编译所有的.CPP文件作为

我对使用节点gyp和nw gyp相当陌生。是否有其他限定符可以添加到binding.gyp文件中,以明确表示给定的.cpp文件实际上应编译为Objective-C++,类似于我上面提到的Xcode中的“type”设置?作为建立概念证明的过渡步骤,我成功地获得了.mm文件,并将其编译为Objective-C++。然而,正如上面提到的,这些文件中的许多实际上是多平台的,一旦我把概念证明移到其他平台上,就应该编译成直的C++。因此我更希望他们保留.CPP文件扩展名。

< P>编译所有的.CPP文件作为Objto-C++,添加以下内容到绑定。
'conditions': [
    ['OS=="mac"', {
        'xcode_settings': {
            'OTHER_CFLAGS': [
                '-ObjC++'
            ]
        }
    }]
]
'conditions': [
    ['OS=="mac"', {
        'sources': [
            "file.mm"
        ]
    }],
    ['OS=="win"', {
        'sources': [
            "file.cpp"
        ]
    }]
]
如果只需要将一些.cpp文件编译为Objective-C++,请创建一个.mm文件,其中仅包含应编译为Objective-C++的.cpp文件。在binding.gyp中,根据平台使用条件编译.mm包装文件或.cpp文件

在file.mm中:

#include "file.cpp"
在binding.gyp中:

'conditions': [
    ['OS=="mac"', {
        'xcode_settings': {
            'OTHER_CFLAGS': [
                '-ObjC++'
            ]
        }
    }]
]
'conditions': [
    ['OS=="mac"', {
        'sources': [
            "file.mm"
        ]
    }],
    ['OS=="win"', {
        'sources': [
            "file.cpp"
        ]
    }]
]

你解决过这个问题吗??这里有一些“野外绑定”可以帮助您与其他项目进行比较。