簡體   English   中英

在 Visual Studio C++ 項目中自動更新 node-gyp 包含文件的路徑

[英]Auto-update path to node-gyp include files in a Visual Studio C++ project

我正在嘗試轉換一個在 MacOS 和 Linux(特別是 Raspbian)上編譯得很好的項目,以便它可以在 Windows 上編譯。 (完整代碼在這里: https : //github.com/kshetline/rpi-acu-rite-temperature

在經歷了很多悲痛之后(就像我安裝的 Node 12 在我不知情的情況下消失並被 Node 8 取代,在 Windows C++ longint都是 32 位的?真的!?)我終於制作了代碼使用node-gyp和 Visual Studio 2019 進行編譯,但 Visual Studio 設置以我不喜歡的方式固定到特定版本的 Node。

這是我的CppProperties.json文件:

{
  "configurations": [
    {
      "inheritEnvironments": [
        "msvc_x86"
      ],
      "name": "x86-Debug",
      "includePath": [
        "${env.INCLUDE}",
        "${env.LOCALAPPDATA}\\node-gyp\\Cache\\12.16.1\\include\\node\\**",
        "${workspaceRoot}\\**"
      ],
      "defines": [
        "WIN32",
        "_DEBUG",
        "NAPI_CPP_EXCEPTIONS",
        "UNICODE",
        "_UNICODE",
        "USE_FAKE_PIGPIO"
      ],
      "intelliSenseMode": "windows-msvc-x86"
    }
  ]
}

我不想在我的包含路徑中放置特定版本的 Node,但我不知道如何在沒有它的情況下使其工作。 我什至無法通過使用12.*12.**使其適用於特定的主要版本的 Node——通配符在那里似乎對我不起作用。

我看到沒有 Windows 環境變量可以讓我使用諸如${env.NODE_VERSION} ,而且AFAIK 也沒有 VS 預定義變量可以處理這個問題。

我可以使用我自己的環境變量,但這必須手動更新,這是我試圖避免的。

Visual Studio 是否有一種方法可以讓我編寫更新腳本,例如以某種方式執行命令node --version ,從輸出中去除前導字母“v”,然后將結果放入環境變量中?

還有其他可能的解決方案嗎?

更新:

我從通用命令行應用程序開始更改了我的 Visual Studio 項目的設置,並且配置的工作方式完全不同,根本沒有CppProperties.json文件,但問題仍然基本相同——我現在有了$(LOCALAPPDATA)\\node-gyp\\Cache\\12.16.1\\include\\node改為進入配置對話框。

使用node-addon-api必須在編譯時以 node 的精確版本為目標。

那是因為N-API本身是“版本化”的,(具有一位數的宏, NAPI_VERSION ,當前從 1 到 5,加上特殊值NAPI_VERSION_EXPERIMENTAL=2147483647

例如,如您所見,在N-API 版本矩陣中,版本 4 在節點 v10.16.0 中可用,但在一些較舊的 v10 版本中不可用。

該插件與 node.exe 是“復古鏈接的”(我不知道該技術的名稱),並且該鏈接是“延遲加載”鏈接。 該技巧允許插件使用主機可執行文件中的N-API函數,即使它不是“node.exe”(因此使用win_delay_load_hook.cc )。

至於CppProperties.json文件,我的理解是它只被 Intellisence 使用,與編譯時使用的頭文件無關。

您可以使用configure命令的--target選項強制 node-gyp 使用特定版本的節點,與機器上安裝的當前版本無關。

另一個有用的選項是--devdir ,它允許擺脫臭名昭著的(afaic) %localappdata%\\node-gyp\\Cache根目錄。

所有 node-gyp 命令選項都在這里

請親愛的 node/node_gyp/N-API 專家閱讀本文,不要猶豫,指出/修復該答案中的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM