控制哪个项目头文件Xcode将包括

我的 Xcode项目使用两个目标构建同一产品的变体.两者之间的区别只在于使用哪个版本的包含的库.对于.c源文件,使用目标复选框可以轻松地将正确的版本分配给正确的目标.但是,包括头文件始终包含相同的头文件.这对于一个目标是正确的,但对另一个目标是错误的.

有没有办法控制每个目标所包含的头文件?

这是我的项目文件层次结构(在Xcode中复制):

MyProject
  TheirOldLib
    theirLib.h
    theirLib.cpp
  TheirNewLib
    theirLib.h
    theirLib.cpp
myCode.cpp

和myCode.cpp做的事情,如:

#include "theirLib.h"
…
somecode()
{
#if OLDVERSION
  theirOldLibCall(…);
#else
  theirNewLibCall(…);
#endif
}

当然,我定义一个目标的OLDVERSION而不是另一个.

注意#include必须如图所示.以下两个失败,找不到文件错误:

#include "TheirOldLib/theirLib.h"
#include "TheirNewLib/theirLib.h"

那么有没有办法告诉Xcode他们的Lib.h是否包含每个目标?

约束:
– 两个头文件具有相同的名称.作为最后的手段,我可​​以重命名其中一个,但我宁愿避免这种情况,因为这将导致主要的头发拉在其他平台上.
– 必须更改#include以添加对封闭文件夹的引用也是我宁愿避免的,因为我需要使用条件编译指令两次.
– 我可以自由地调整我的项目,否则认为合适

感谢任何帮助.

解决方法

答案的关键部分是在评论中使用Chris建议的USE_HEADERMAP = NO.这里是细节.

简短的食谱(在Xcode 3.2.2中检查):

>为每个相关目标添加USE_HEADERMAP = NO的自定义构建设置.这是怎么回事?
1.1.在“构建”窗格上打开目标的信息面板.
1.2.拉下窗口左下角的动作弹出菜单,选择“添加用户定义设置”.
1.3.在新添加的行中,将第一列(“设置”)设置为USE_HEADERMAP,将第二列(“值”)设置为NO.
>为每个目标添加正确的包含路径(目标构建设置“标题搜索路径”).在我的例子中是:
2.1.将他们的OldLib添加为“旧”目标
2.2.添加他们的NewLib为“新”目标

步骤1禁用Xcode的自动标题映射功能,通过它可以通过其名称直接访问项目中包含的任何头文件,无论其实际路径如何.当两个标题具有相同的名称时,此功能会导致无法解决的歧义.

步骤2允许#include“themLib.h”工作,而不限定头文件实际路径名.

这两个步骤一起实现了我的两个限制.

最后,据我所知,苹果公司没有记录USE_HEADERMAP.我会填写一个错误报告,因为这个设置在许多情况下至关重要,因为它的谷歌搜索显示.报告为rdar:// 7840694.还打开雷达为http://openradar.appspot.com/radar?id=253401

以上是来客网为你收集整理的控制哪个项目头文件Xcode将包括全部内容,希望文章能够帮你解决控制哪个项目头文件Xcode将包括所遇到的程序开发问题。

如果觉得来客网网站内容还不错,欢迎将来客网网站推荐给程序员好友。