繁体   English   中英

node-gyp 的鸡与蛋问题:指向依赖项中的头文件

[英]Chicken-and-egg problem with node-gyp: Pointing to a header file in a dependency

这是我第一次尝试构建包含 C++ 代码的 npm 包。 我认为我已经正确设置了所有内容,因为在包本身的项目文件夹中工作时, npm inode-gyp rebuild工作得很好。

但是现在我已经发布了该包,并且我尝试将该包用作另一个项目中的依赖项,当尝试包含一个重要的 C 头文件时,在编译期间安装失败:

  CXX(target) Release/obj.target/ar_signal_monitor/ar-signal-monitor-node.o
../ar-signal-monitor-node.cpp:1:10: fatal error: 'napi.h' file not found
#include <napi.h>
         ^~~~~~~~
1 error generated.

头文件位于包的依赖项之一node-addon-api 我的binding.gyp文件如下所示:

{
  "targets": [
    {
      "target_name": "ar_signal_monitor",
      "cflags!": ["-fno-exceptions"],
      "cflags_cc!": ["-fno-exceptions"],
      "cflags": ["-Wall", "-std=c++11", "-pthread"],
      "cflags_cc": ["-Wall", "-pthread"],
      "sources": [
        "ar-signal-monitor-node.cpp",
        "ar-signal-monitor-node.h",
        "ar-signal-monitor.cpp",
        "ar-signal-monitor.h"
      ],
      "include_dirs": [
        "<!(node -e \"require('node-addon-api').include\")",
        "node_modules/node-addon-api",
        "/usr/include/node",
        "/usr/local/include/node"
      ],
      "libraries": [
        "-lwiringPi"
      ],
      "defines": ["NAPI_CPP_EXCEPTIONS"],
      'conditions': [
        ["OS==\"mac\"", {
          "defines": ["USE_FAKE_WIRING_PI"],
          "libraries!": ["-lwiringPi"],
          "xcode_settings": {"GCC_ENABLE_CPP_EXCEPTIONS": "YES"}
        }],
        ["OS==\"win\"", {
          "defines": ["USE_FAKE_WIRING_PI"],
          "libraries!": ["-lwiringPi"]
        }],
      ],
    }
  ]
}

我正在尝试使用"include_dirs"来告诉编译器在哪里可以找到<napi.h>头文件。 我想,也许我的问题是,在安装过程中要首先编译我的C ++代码,只有经过成功完成的话,然后加载在头文件,我需要进行成功的编译生活中的依赖NPM包。

有没有办法解决这个问题? 这是一个与我想象的不同的问题吗? 我首先尝试在客户端项目中包含node-addon-api ,但这没有帮助。 (即使它奏效了,也不会比临时说出来更好。)

该项目的完整代码可以在这里找到: https : //github.com/kshetline/rpi-acu-rite-temperature

我一直在想我需要在我的binding.gyp文件中做一些不同的事情,但解决方案(或者至少是一个解决方案)结果证明我可以在我的package.json做一些事情:

  "scripts": {
    "preinstall": "npm i node-addon-api",

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM