我有一个预先存在的C ++静态库,我将其移植到可编译为Node.js / Node-webkit的插件。为了构建这个插件,我在我创建的binding.gyp文件上运行node-gyp / nw-gyp。这个静态库是多平台的,分别通过VisualStudio,Xcode和CMake为Windows,Mac和Linux编译。这个静态库已经在各种应用程序中使用了(读取,它可能不会仅仅针对这一个插件编译案例进行重构 - 这仍然是概念验证阶段)。
所有跨平台C ++文件都具有.cpp文件扩展名,即使其中一些实际上是在Mac上编译为Objective-C ++(以便利用一些Cocoa细节)。在Mac上的Xcode中,我可以通过切换'类型'来编译像Objective-C ++这样的.cpp文件。来自' Default - C ++ Source'到目标-C ++源'在'文件检查器'。这很方便,因为无论.cpp文件扩展名是什么,我都可以在Windows / Linux和Mac上的Obj-C ++上编译自我相同的文件。要构建插件,我使用的是ObjectWrap范例。为了包装Objective-C ++类,我必须包含他们的.h文件,这会强制将Objective-C ++场景置于插件级别。
我很擅长使用node-gyp和nw-gyp。是否有任何额外的限定符可以添加到我的binding.gyp文件中以明确表示给定的.cpp文件实际上应该编译为Objective-C ++,类似于'类型'我在上面提到的Xcode设置?作为构建概念证明的临时步骤,我成功地将.mm文件编译为Objective-C ++。然而,正如上面提到的,这些文件中的许多实际上是多平台的,并且一旦我将概念证明移动到其他平台上,就应该在Windows / Linux上编译为直接C ++,因此我更希望它们保留.cpp文件扩展名。