两个目标,两个同名的头文件,如何为正确的目标使用每个头文件?

13

好的,这是我尝试过的方法。

我在现实生活中有两个不同的目录中有头文件。它们的名称相同,但位于两个不同的位置。

我想为每个目标只包含相关的头文件。为了方便说明,让我们假设头文件名为“Config.h”。

所以我有:

${PRODUCT_DIR}/Header1/Config.h

${PRODUCT_DIR}/Header2/Config.h

这些文件也出现在Xcode的LHS中的两个不同组(指向IRL文件夹的Header1和Header2)。

现在,我需要做的就是让Xcode为每个目标选择正确的头文件。

Target1

and

Target2

我尝试为每个目标添加路径到User Header Search Paths,但它仍然选择错误的文件。我还尝试切换“始终搜索用户路径”,但似乎没有效果。

所以我的问题是,这是因为它们在项目目录中吗?还是因为它们在Xcode的文件管理器中(LHS),因此Xcode将它们复制到构建文件夹中?

奇怪的是,它似乎选择了按字母顺序排列的最后一个文件夹中的头文件...

在以前的Xcode版本中,我确定您可以选择要复制到构建文件夹中的文件头。

无论如何...有谁知道如何修复这个问题,以便我可以为目标选择正确的头文件吗?

非常感谢。


我不确定,但是条件导入怎么样? - Anoop Vaidya
那是备选方案。 :) 但这样会增加更多步骤。我相信这应该是可能的。 - Thomas Clayson
  1. 其实我不明白为什么你在“Header Search Paths”上遇到了问题。尝试从项目中排除这些头文件,不要使用“**”递归搜索路径。
  2. 通常我会使用不同的“include”和“ifdef else”。因此,您可以将任何全局变量添加到任何目标中,并检查您需要包含什么(例如:“ifdef target1 #include"header1.h" else #include"header2.h" endif;)。所以这取决于您的要求。
- Jlexyc
2个回答

9
我遇到的问题有两个:
  1. 你需要从项目中删除头文件。如果它们在Xcode的文件管理器中,那么它们将自动包含在项目中。

  2. 你需要在“用户头文件搜索路径”中使用相对路径到你的文件夹。我之前使用的是 ${PROJECT_DIR}/path/to/header/folder,虽然路径正确,但似乎无法正常工作。改为使用 ./path/to/header/folder 就可以正常运行了。


1
如果我正在构建一个框架并且它们是公共头文件,那么我无法从项目中删除头文件,怎么办? - Nicolas Miari
@NicolasMiari,你能找到解决这个问题的方法吗? - sudeepdino008

1

我在一个项目中有4个目标和40多个头文件,在XCode 8中最好的解决方案是更改以下标签:

Always Search user Paths

对我来说,一切都很好:

在此输入图像描述

该设置已自 Xcode 8.3 起被弃用,在未来的版本中可能不再受支持。建议您禁用此设置。 - Parag Bafna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接