何时使用Visual Studio附加依赖项? 在C++中,你得到了头文件(.h)、(.LIB)文件和(.dll)文件。

何时使用Visual Studio附加依赖项? 在C++中,你得到了头文件(.h)、(.LIB)文件和(.dll)文件。,c++,visual-studio,linker,C++,Visual Studio,Linker,在Visual Studio中,可以在三个不同的位置提供搜索这些文件的位置: 配置属性=>C/C++=>General=>Additional Include目录。 在这里,您列出了要搜索并提供的“包含”目录 配置属性=>Linker=>General=>其他库目录。 在这里,您列出了要搜索并可用的“lib”目录 配置属性=>链接器=>输入=>其他依赖项。 在这里,您可以明确指定要包含的.lib文件 问题是: 问题1:如果在#1中指定了头文件,在#2中指定了库,那么为什么/什么时候要在#3中指定

在Visual Studio中,可以在三个不同的位置提供搜索这些文件的位置:

  • 配置属性=>C/C++=>General=>Additional Include目录。 在这里,您列出了要搜索并提供的“包含”目录

  • 配置属性=>Linker=>General=>其他库目录。 在这里,您列出了要搜索并可用的“lib”目录

  • 配置属性=>链接器=>输入=>其他依赖项。 在这里,您可以明确指定要包含的.lib文件

  • 问题是:

    问题1:如果在#1中指定了头文件,在#2中指定了库,那么为什么/什么时候要在#3中指定任何内容

    问题2:我看到人们在#3中加入了一个特定的调试或发布版本的库。您是否可以在#3中指定库的调试版本或发布版本,并且仍然以发布或调试模式构建?理想情况下,这里应该提供哪个版本的库调试/发布

  • 配置属性=>C/C++=>General=>Additional Include目录。在这里,您列出了要搜索并提供的“包含”目录
  • 这将告诉编译器在何处查找尖括号中包含的头文件。这会影响编译器(或预处理器)的工作方式

  • 配置属性=>Linker=>General=>其他库目录。在这里,您列出了要搜索并可用的“lib”目录 这会告诉链接器在哪里查找库(即,要查找的目录)。这会影响链接器(而不是编译器)的工作方式

  • 配置属性=>链接器=>输入=>其他依赖项。在这里,您可以明确指定要包含的.lib文件
  • 这会告诉链接器要在这些目录中查找哪些库。这也会影响链接器的工作方式

    问题1:一般来说,如果你使用2,你几乎肯定也需要使用3。3告诉它链接到哪个库,2告诉它在哪里可以找到那个库。当然,它也可以是多个库


    问题2:如果同时提供了调试和发布库,那么您通常希望在调试版本中使用调试版本,在发布版本中使用发布版本。在对话框的左上角,选择要修改的配置。通常,您会希望为调试和发布指定目录,但会指定单个库,一个用于调试,一个用于发布。

    并且只需指出显而易见的一点,您不必在项目的属性设置中添加任何正在使用的.h文件,因为您在源代码中显式地包含了它们,在您已经提供的路径中查找标题。

    此外,在上述位置,当您添加到目录中时,请查看宏>>按钮。 e、 g.对于32位/64位/版本和调试,您可能需要使用不同的库。您可以使用($ProjectDir)宏提供相对链接,例如($DXSDK_DIR)宏确保为directx开发获得正确的LIB

    因此,我有($DXSDK\u DIR)\Lib\x86和($DXSDK\u DIR)\Lib\x64,这也解决了在32位和64位Windows操作系统之间进行开发时出现的问题。

    关于第二季度

    对于第三方库,我利用Visual Studio Build命令宏变量
    $(平台)
    $(配置)
    输入如下内容:

    Y:\dev3\cpp\cryptopp\cryptopp561\$(Platform)\Output\$(Configuration);...
    

    通过这种方式,您只需输入相同的行,然后Visual Studio替换宏变量,并根据您激活的配置查看
    \cryptopp561\Win32\Output\Release\
    \cryptopp561\Win32\Output\Debug\
    。它实际上并没有节省很多打字时间,但有助于保持内容的一致性和准确性。

    谢谢!一个反例,仍然让我困惑。。。我正在使用一个Boost库,tokenizer。所以对于#1,我指定\include目录的位置,然后在我的.cpp文件中,我只做:#include“boost/tokenizer.hpp”,这样我的程序就可以成功运行了问题3:为什么我不必包括\lib库的位置(例如#2为空)以及#3的位置(例如,如果我没有指定确切的库,为什么我能够链接到该库)。谢谢@用户205834:有两种可能性。首先,很多Boost都是只包含头的库——也就是说,所有的代码都在头中,您不需要链接任何东西就可以使用它。其次,对于使用库的部件,它们通常使用
    #pragma comment(lib,“libname”)
    自动链接到库。不,在我的项目中,我使用$(配置)。我刚刚阅读了$(ConfigurationName)的文档,我想这也可以,但我还没有测试它。