首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点-gyp的鸡和蛋问题:指向依赖项中的头文件。

节点-gyp的鸡和蛋问题:指向依赖项中的头文件。
EN

Stack Overflow用户
提问于 2020-02-09 06:29:05
回答 1查看 885关注 0票数 2

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

但是,既然我已经发布了这个包,并且我试图在另一个项目中使用该包作为依赖项,那么在编译过程中,当试图包含一个重要的C头文件时,安装就会失败:

代码语言:javascript
复制
  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文件如下所示:

代码语言:javascript
复制
{
  "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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-09 06:53:14

我一直在想,我需要在我的binding.gyp文件中做一些不同的事情,但是这个解决方案(或者至少是一个解决方案)变成了我可以在package.json中做的事情。

代码语言:javascript
复制
  "scripts": {
    "preinstall": "npm i node-addon-api",
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60134075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档