如何包含“<>”级联 headers

How to include "<>" cascading headers

我正在尝试使用 SWIG 来将 C++ 代码用作 Go 模块。 我的文件夹是这样组织的:

MyLib/
   -go-integration
      -basic_host
           -basic_host.i
           -basic_host_wrap.cxx // gen by SWIG
           -basic_host_wrap.h // gen by SWIG
           -basic_host.go // gen by SWIG
   -MyLib/
      -include/
          -mylib
             -common.hpp
             -inputs.hpp
             -guests.hpp
             -logger.hpp
             - ...
      -src/
         -guests.cpp
         -logger.cpp
         - ...
          

我的 basic_host.i 文件:

%module(directors="1") basic_host
%{
    #include <atomic>
    #include <map>
    #include <iostream>

    #include "../../MyLib/include/mylib/inputs.hpp"
    #include "../../MyLib/include/mylib/common.hpp"
    #include "../../MyLib/include/mylib/guests.hpp"
%}


%inline %{
 somefunc to export ....
%}

%constant someConstant...

目前我用的是:

swig -go -cgo -c++ -intgosize 64 .\basic_host.i
go install

In file included from basic_host_wrap.cxx:344:
../../MyLib/include/mylib/common.hpp:6:10: fatal error: mylib/inputs.hpp: No such file or directory
    6 | #include <mylib/inputs.hpp>
      |   
^~~~~~~~~~~~~~~~~~~~~~
compilation terminated.

我的问题是我似乎无法导入我的 C++ 文件,因为它们正在导入带有“<>”的文件。但是在 C++ 方面,我使用这些文件没有问题(导入完成得很好)。

guests.hpp 需要我的 go 包导入,但它导入 common.hpp 导入 inputs.hpp 并给我这个错误。也许有一种方法可以通过我的 lib 的 ext 依赖项直接导入而不给出相对路径,但我还没有找到它。

这种行为可能是因为 SWIG 使用 gcc/g++ 并且不知道在哪里可以找到包含文件,但我也不知道如何 change/try。

这正是我所怀疑的,SWIG 使用 gcc 和 cgo 来生成文件,您可以将其添加为环境变量 CGO_CPPFLAGS,这是您的包含文件的路径。

$env:CGO_CPPFLAGS="-I D:/Repos/MyLib/MyLib/include"

我也试过像这样使用 SWIG 的命令 -I :

swig -go -cgo -c++ -I"D:/Repos/MyLib/MyLib/include" -intgosize 64 .\basic_host.i

但它并没有直接起作用。