避免为不直接#included的标题添加“包含路径”

时间:2010-10-12 11:45:11

标签: visual-c++ include project header-files

假设我有两个vc ++项目,proj_a和proj_b

proj_a包含头文件a.h

proj_b依赖于proj_a。它包含#include< a.h>的文件b.h.我在项目设置的“其他包含目录”中添加了a.h的目录来构建它。

现在说,我还有100个项目,其文件#include< b.h>。只在“附加”列中添加b.h的目录不起作用。我也要包括a.h的路径..如何避免这种情况?

简单地说,如何保持任何vc ++项目的包含路径数等于直接依赖项的数量?

我没有选择将vc ++环境设置设置为全局包含a.h的路径,因为我团队中的其他人都必须导入我的设置,事情会变得更加混乱......

我没有足够的想法但是有没有办法通过预编译头实现这一点?我认为它们是项目特定的,不应该跨项目共享?

2 个答案:

答案 0 :(得分:0)

依赖性是可传递的。也就是说,由于b.h包含a.h,因此包含b.h的所有内容都需要能够找到a.h。您可以做的唯一事情是以某种方式删除b.ha.h的依赖关系,可能是通过对a.h中的类型使用前向声明,而不是依赖于{{1}}的完整定义头文件中的类型。

如果这不是一个选项,至少可以使用Visual C++'s "property sheet" feature减轻项目中重复的包含路径的痛苦。这些允许您在单个文件中定义共享构建设置,可以由任意数量的项目继承。这也将解决与协作者共享这些设置的问题。

答案 1 :(得分:0)

感谢Nick的回答。我可以使用a.h b.h内的相对路径,并在proj_b和其余100个项目中保存其他包含目录。

实际上,在我的情况下,有多种proj_a:'proj_a1,proj_a2等,每个都有一个单独的a.h.其他100个项目通过在其设置中包含适当的附加包含目录来决定要包含哪种风味。这是一个问题,每当我们需要升级proj_a风味时,所有include-dirs都需要更改。

我通过删除所有include-dirs而不是在其他项目中定义PROJ_A1,PROJ_A2等来解决这个问题。 b.h不再#include a.h,而是包含a_redirector.h头文件(具有相对路径)。在a_redirector.h中,我们有#ifdef PROJ_A1#ifdef PROJ_A2等等,它们根据已经定义的内容查看包含特定a.h文件(此处也是相对路径)。

现在,每当我们需要升级proj_a flavor时,我只需修改a_redirector.h只指向所有新的a.h,从而与早期架构相比具有单一控制点。