Visual Studio(C ++)-关于目录配置,最佳实践是什么?

6

(我正在使用VS 2010,但大部分信息至少适用于VS 2003,也许在构建配置菜单/GUI的组织/布局方面会有些微差异)

在配置项目构建时,有一个名为"VC++ Directories"的部分,其中包含6个标签。其中2个是:

  1. Library Directories(库目录)
  2. Include Directories(包含目录)

此外,如果您进入'C/C++' -> 'Additional Include Directories',您可以指定其他目录,据我所知(从MSDN和VS帮助中这些目录的描述),它与'Include Directories'相同(虽然它们之间可能存在一些搜索顺序)。同样,如果您转到'Linker' -> 'Additional Library Directories',您可以指定要链接到项目的库的其他路径(这里的描述更加精确-"允许用户覆盖环境库路径",因此这些路径会更早地被搜索)。

我的问题是-

是否有理由使用其中一个(路径)而不是另一个?什么是最佳实践?

请在回答中涉及使用属性页功能(它增加了对不同项目配置的灵活性,并允许轻松重用现有项目,但在此处对最佳实践造成了更多困惑)。提前致谢。


我相信C++目录是新的和正确的方法,其他的可能是旧版本(<10)的遗留物,但我很想看到这个问题的答案。 - ssube
实际上,它们早在 VS 2003 就存在了,但它们已经改变了。在 VS 2003 中,它们是在“工具”->“选项...”->“项目”->“VC++目录”中配置的,并且适用于所有项目。现在它们在属性页面下,并且可以针对每个项目(事实上,每个属性表)进行指定。 - infokiller
是的,他们相当大地改变了路径的处理方式。有趣的是,在某些情况下,旧的全局目录仍然可以在VS10中使用,这导致了一些非常不寻常的情况(尽管我已经安装了9和10)。 - ssube
2个回答

4
让我们首先考虑仅包含路径。
Microsoft文档指出,编译器按以下顺序搜索目录:
1. 包含源文件的目录。 2. 使用 /I 选项指定的目录,按 CL 遇到它们的顺序。 3. 在 INCLUDE 环境变量中指定的目录。
现在,“VC++ 目录” → “包含目录”被记录为对应于 INCLUDE 变量。也就是说,这些目录最后被搜索。根据文档。
而“C/C++” → “常规” → “附加包含目录”被记录为对应于 /I 选项。也就是说,这些目录最先被搜索。根据文档。
如果存在任何最佳实践,那么它可能是
1. 保留覆盖包含的可能性, 2. 最小化编译器调用命令行长度(以不超过8KB左右,因为我记得Windows有这样的限制)。
也就是说,默认情况下使用“VC++ 目录”→“包含目录”。
完整的环境变量对应集合:
1. “VC++ 目录”→“可执行目录”→ PATH 2. “VC++ 目录”→“包含目录”→ INCLUDE 3. “VC++ 目录”→“引用目录”→ LIBPATH(对于 #using) 4. “VC++ 目录”→“库目录”→ LIB
我是怎么发现这个的?
只需单击GUI并按F1以获取帮助即可。:-)
阅读文档永远是个好主意。

关于属性页面/表格怎么办?这里有一个额外的灵活性(您可以通过更改属性表的评估顺序来覆盖设置),我不知道如何最好地处理。 - infokiller

0

默认情况下,Visual Studio 将以下路径放入其 INCLUDE 变量 (VC++ Directories -> Include directories):

  • Microsoft 的 Visual C++ headers 路径: $(VCInstallDir)include
  • MFC headers 的路径 (针对 MFC 项目): $(VCInstallDir)atlmfc\include
  • Windows SDK headers 的路径: $(WindowsSdkDir)include;$(FrameworkSDKDir)\include

它们是预配置的,请勿更改它们。如果您的项目依赖于其他组件/框架,则将包含其头文件的路径添加到 C/C++ -> General -> Additional Include Directories (/I 编译器开关)。在这种情况下,使用尖括号与您的 #include 声明。

对于库也是同样的操作,使用 Visual Studio 默认路径和从其他组件/框架中添加库路径到 Linker -> Additional Library Directories


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