无法获得node-gyp来创建/ MD的Windows解决方案

时间:2012-11-20 08:59:35

标签: gyp node-gyp

我想用/ MD标志(多线程DLL)编译node.js模块。 拥有' / MD'在binding.gyp中的cflags选项中不起作用。

3 个答案:

答案 0 :(得分:3)

您需要将RuntimeLibrary设置为2。像这样:

'msvs_settings': {
  'VCCLCompilerTool': {
    'RuntimeLibrary': 2, # multi threaded DLL
  },
},

答案 1 :(得分:3)

在使用binding.gyp - 很多之后 - 似乎问题不是由于node-gyp而是与gyp本身以及特定的嵌套顺序有关设置。也就是说,为了设置运行时库(在发行版中),运行时库选项必须嵌套在gyp文件中:

configurations
  - Release
    - msvs_settings
      - VCCLCompilerTool
        - RuntimeLibrary

尝试在没有任何一个嵌套元素的情况下设置运行时库会停止设置运行时库。 (恼人地没有任何警告,忽略了这个选项。)

因此,要设置模块的调试和发布版本以使用调试运行时DLL(编译器选项/ MDd)和发布运行时DLL(编译器选项/ MD),binding.gyp将如下所示:

{
    'targets': [
    {
        # Usual target name/sources, etc.

        'configurations': {
            'Debug': {
                'msvs_settings': {
                            'VCCLCompilerTool': {
                                'RuntimeLibrary': '3' # /MDd
                    },
                },
            },
            'Release': {
                'msvs_settings': {
                            'VCCLCompilerTool': {
                                'RuntimeLibrary': '2' # /MD
                    },
                },
            },
        },
    },],
}

答案 2 :(得分:0)

对于我的项目,唯一的解决方案是创建一个新配置并从原始配置继承:

msbuild /p:Configuration=ChirpDebug ....

然后使用

{{1}}

我用libuv尝试了这个解决方案,效果很好。我不知道node-gyp,但类似的方法应该有用。