【问题标题】:XCode 4 C++ header file with relative path to another headerXCode 4 C++ 头文件与另一个头文件的相对路径
【发布时间】:2011-06-10 07:29:57
【问题描述】:

我正在使用一个包含结构的库,其中 .h 文件都在一个目录中。这些 .h 文件包含一行,一个 #include 指令,它指向特定源文件夹位置中的“真实”头文件。这些文件中的#include 路径是相对的。

所以,这里有一个例子。目录结构为:

/project
     /sources 
         <my .cpp files>
         <my .cpp files>
         ...
     /include
         /component
             foo1.h
             foo2.h
     /platformA/something/foo1.h
     /platformB/somethingelse/foo2.h

/include/component/foo1.h 包含一行代码: #include "../platformA/something/foo1.h"

/include/component/foo2.h 包含单行代码#include "../platformB/somethingelse/foo2.h"

在我的消息来源中,我只有: #include "component/foo1.h"

我的项目的标头搜索路径指向/include

现在,XCode 4 能够在 /include 中找到 component/foo1.h,但它无法遵循这些标头中的相对包含路径并在 `/platformA/something' 目录中找到“真正的” foo1.h,等等。

我怀疑这是因为顶级 foo1.h 文件中的包含路径是相对于其位置的,但 XCode 可能会将其视为相对于其他位置(项目根目录或其他位置)? FWIW,Visual Studio 在相同的配置下没有问题。

有什么想法可以解决这个问题吗?

【问题讨论】:

    标签: c++ xcode macos xcode4


    【解决方案1】:

    从您的目录结构看来,platformAplatformB 目录似乎位于包含文件夹之外。有两种可能的解决方案:

    解决方案 A

    移动这些 到include文件夹。

    解决方案 B

    添加project/platformAproject/platformBdirectories where include files should be looked for 在项目中 设置。

    【讨论】:

    • 我意识到我在尝试简化时遗漏了一些东西。我将示例更新为更真实。在我的消息来源中,我想#include "component/foo1.h",所以你将东西移动到包含文件夹中的建议不会真正起作用(它会在我错误简化的示例中 - 对此感到抱歉)。
    • 那你可以查看我提出的第二种方案。
    【解决方案2】:

    不要使用相对路径。严重的是,它们的工作方式是实现定义的行为,因此不同的编译器/环境/平台的行为会有所不同,在您的情况下,Xcode 几乎肯定会在某种“构建”目录中调用 GCC 或 clang,这可能是也可能不是源目录的兄弟。

    这不值得头疼。

    platformAplatformB 放在include 中,或者添加另一个目录(例如platform-include)将它们放在那里,然后将该目录添加到您的包含路径中。

    【讨论】:

    • 谢谢,但遗憾的是,这并没有多大帮助。我跨多个平台/构建系统共享此代码,这不是我控制的源代码。在我的生活变得比现在更糟之前,我想尝试让它发挥作用。
    • @psychotik:没关系,这实际上与您所说的不符,抱歉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    相关资源
    最近更新 更多