编译库的 headers 无法相互访问

Compiled library's headers not being able to reach each other

我有一个关于名为 JSBSim 的库的问题。库本身并不是那么相关,但问题是围绕 header 文件中的多个循环依赖案例。

背景资料:

运行 CentOS 7 64 位 - 库与位于 usr/local/include 中的 header 以及 usr/local/lib[=17= 中相应的 .a 和 .la 静态链接]

/usr/local/include/JSBSim的目录结构如下:

initialization
input_output
math
models
simgear
FGFDMExec.h
FGJSBBase.h

我正在运行生成一个包含以下内容的 makefile:

all:
    g++ *.cpp -lJSBSim -o output

clean:
    /bin/rm -f output

我正在使用以下基本框架为 JSBSim 编写一个包装器:

#include <JSBSim/FGFDMExec.h>

class JsbSimWrapper
{
};

当我 运行 makefile 时出现以下错误:

compilation terminated.
In file included from /usr/local/include/JSBSim/FGFDMExec.h:47:0,
                 from JsbSimWrapper.hpp:7,
                 from main.cpp:1:
/usr/local/include/JSBSim/initialization/FGTrim.h:53:23: fatal error: FGFDMExec.h: No such file or directory
 #include "FGFDMExec.h"
                       ^
compilation terminated.
make: *** [all] Error 1

错误不是来自 class 本身;而是包含库的主要 header 文件。我做了一些调查,文件 FGTrim.h 位于初始化中,在 FGTrim 的包含中:

#include "FGFDMExec.h"

看起来 FGTrim 看不到 FGFDMExec.h,因为它在目录下,但是 FGFDMExec.h 可以看到 FGTrim 就好了,因为在 FGFDMExec.h 中有以下内容:

#include "initialization/FGTrim.h"

有什么办法可以解决这个问题吗?如果不需要,我真的不想重新组织 header 结构或重写 header 并重新编译库。

谢谢!

我解决了这个问题。

我将 makefile 编辑为以下内容:

JSBSIM=/usr/local/include/JSBSim
CXXFLAGS=-I$(JSBSIM)
CXXFLAGS+=-I$(JSBSIM)/initialization
CXXFLAGS+=-I$(JSBSIM)/simgear/xml
CXXFLAGS+=-I$(JSBSIM)/simgear
CXXFLAGS+=-I$(JSBSIM)/models/atmosphere
CXXFLAGS+=-I$(JSBSIM)/models/propulsion
CXXFLAGS+=-I$(JSBSIM)/models/flight_control
CXXFLAGS+=-I$(JSBSIM)/models
CXXFLAGS+=-I$(JSBSIM)/input_output
CXXFLAGS+=-I$(JSBSIM)/math

output: main.cpp JsbSimWrapper.cpp
    g++ main.cpp JsbSimWrapper.cpp $(CXXFLAGS) -lJSBSim -o output
clean:
    /bin/rm -f output

希望对大家有所帮助!