C++ 如何在VC++;项目

C++ 如何在VC++;项目,c++,c,visual-studio,C++,C,Visual Studio,例如,我有两个header.h文件位于两个不同的目录include1和include2。 我的源代码文件使用常规包含,不指定确切位置,如下所示: #include "header.h" 在项目配置中,我将我的include1和include2文件夹都设置在附加include目录列表中 问题是,当我构建项目时,每次都会选择include1文件夹,而不管我在附加include列表中定义它们的顺序如何 如果我希望使用特定文件夹或特定头文件,而不是另一个文件夹或头文件,如果它们具有相同的文件名,是否有

例如,我有两个header.h文件位于两个不同的目录include1include2。 我的源代码文件使用常规包含,不指定确切位置,如下所示:

#include "header.h"
在项目配置中,我将我的include1include2文件夹都设置在附加include目录列表中

问题是,当我构建项目时,每次都会选择include1文件夹,而不管我在附加include列表中定义它们的顺序如何

如果我希望使用特定文件夹或特定头文件,而不是另一个文件夹或头文件,如果它们具有相同的文件名,是否有任何方法强制执行搜索顺序?

包含顺序(由MS确定)是:

编译器按以下顺序搜索目录:
1.包含源文件的目录。
2.使用/I选项指定的目录,按照CL遇到它们的顺序。
3.在INCLUDE环境变量中指定的目录


因此,这实际上取决于include目录的声明位置。如果它们都是用/I选项指定的(在GUI中的Configuration Properties>C/C++>General>Additional Include Directory下),那么指定的顺序就是搜索的顺序。如果目录在INCLUDE环境变量中(在GUI的Configuration Properties>VC++目录下),则取决于它们的声明位置。如果它在属性表中,那么您就不必继承它们并按所需顺序自己声明它们(以及其他继承的目录)。

我认为您的问题将很难解决。我怀疑header.h包含在文件夹include1中的文件中

这意味着标准的C include路径是

  • 源文件(或包含子文件的头文件)的目录
  • 命令行定义的顺序包括
  • 所以要解决这个问题,我们需要能够(以某种方式)阻止规则1的触发

    如果您不关心修改源代码,那么使用
    #include“projecta/header.h”
    和#include
    “projectb/header.h”
    是实现这一点的正常方法

    在您的情况下,您希望确保包含您的(include2)

    你可以采用的方法

    如果先前的代码(.c/.cpp文件)是可修改的,那么请确保
    #包含“include2/header.h”-也应设置该代码,以满足
    include1/header.h`的所有要求

    如果
    include1/header.h
    有一个include防护(
    \if!defined(h\u header\u h)
    ),则在命令行(
    /DH\u header\u h
    )定义它,因此它不包括在内-这是一个暗中操作,因为该文件无法实现其目的

    编写一个文本修改脚本(sed?),将“header.h”修改为“include2/header.h”-确保源代码中的所有事件都选择您的版本。这不太符合您的规范,但可以设想为保持源代码不变,因为这将是一个预编译步骤


    可以通过创建两个单独的项目来实现保证include顺序更改的目标-一个使用
    include1/header.h
    且原始代码保持不变。然后提供out
    include2/header.h
    作为其接口,该接口以某种方式进行了修改。

    这种歧义很可能应该以其他方式解决。如果您想在同一个项目中使用这两个标题,该怎么办?例如,如果您将它们放在一个目录中,它将解决这个问题。因此将有一个#include“Folder1\header.h”和Folder2版本,我试图实现的是用我自己的头文件替换现有C项目的头文件,而不涉及原始文件(因此原始头中没有ifdef,源代码中没有#include指令的更改)。简单的方法是根本不使用带有原始头文件的目录,但它有一些我不需要替换的其他原始头文件。有一个项目范围的设置“C++目录”,可能在“其他目录”之前搜索。如果您首先在主列表中添加您的
    Folder1
    ,肯定会首先搜索它。不,这也不起作用。Visual Studio的哪个版本?我遇到了与OP类似的问题,两个同名文件位于不同的目录中。我的问题是包含其他.props文件的.props文件的顺序错误。最后需要导入包含我想要的include目录的.props文件,然后在CL和RC的/I选项中首先列出它。