【问题标题】:How to include .cpp and .hpp files of a library in my c++ project in visual studio如何在 Visual Studio 的 c++ 项目中包含库的 .cpp 和 .hpp 文件
【发布时间】:2021-04-25 13:40:26
【问题描述】:

为一个非常基本的问题道歉。我正在尝试从 CMake 项目移植到 Visual Studio 项目中。 基本上我想在不使用 CMake 文件的情况下从 Visual Studio 运行项目。在我需要移植的项目中,有许多文件夹和子文件夹,其中包含许多 .cpp 和 .h 文件。这些包含在主 cpp 文件中,使用 #includes

我的情况

我想要包含的库

还有我的 main.cpp

例如,为了简单起见,假设我有一个主文件 main.cpp,这个文件包括#include "Libpfs/colorspace/colorspace.h"。 Libpfs 是一个文件夹,它有许多子文件夹,其中一个是颜色空间文件夹,它有许多 .h 和 .cpp 文件。一个 .h 文件是 colorspace.h,它使用 #include 包含在 main.cpp 中,该文件夹也有 .cpp 文件,即 colorspace.cpp

我的尝试

我的目标是将它们包含在我的项目中。 现在这是我尝试过的 在 Visual Studio Project->properties->C/C++ in Additional Include Directories 我给出了包含 Libpfs 的文件夹,但这种方法不起作用并给出链接器错误,这可能是因为我没有 Libpfs 的 lib 文件(如果我错了,请纠正我)。我只有相应 .h 文件的 .cpp 文件。我认为错误的原因是 .cpp 文件尚未编译。

我的问题

如何将 cpp 文件也包含到我的项目中(不是 lib 文件,因为我没有这些文件)。

【问题讨论】:

  • 通常不应包含库的 cpp 文件,而应链接到已编译的 .so .lib .dll 左右。如果设置包含路径,请使用 #include <bar/foo.h>。附:一个好的库应该有一个单独的“包含”目录,只有标题..
  • 只需将 cpp 文件添加到项目中,它们就会被编译和链接
  • 谢谢@JHBonarius。但是如果我没有 .lib 或 .so 或 .dll 怎么办?
  • @AlanBirtles 这是否意味着我需要将第 3 方库的每个 .cpp 文件添加到项目中?
  • 您是否尝试过“右键单击解决方案资源管理器中的项目/添加/现有项...”以将所有 cpp 文件和 h 文件添加到您的项目中?这是正常的做法。

标签: c++ visual-studio visual-c++ cmake


【解决方案1】:

打开资源管理器,查找C:\Program Files\Microsoft SDK\,然后在其 \lib 中查找包含大量.lib 的目录。 它是 .lib 和其他类似内容的 msvc 源。在那里复制你的图书馆

【讨论】:

    【解决方案2】:

    使用this 作为来源,我发现CMakeLists.txt 没有什么特别之处。

    FILE(GLOB COLORSPACE_H *.h)
    FILE(GLOB COLORSPACE_HXX *.hxx)
    FILE(GLOB COLORSPACE_CPP *.cpp)
    
    SET(LIBPFS_H ${LIBPFS_H} ${COLORSPACE_H} ${COLORSPACE_HXX} PARENT_SCOPE)
    SET(LIBPFS_CPP ${LIBPFS_CPP} ${COLORSPACE_CPP} PARENT_SCOPE)
    

    因此,您可以将所有文件添加到 VS C++ 项目中。我会使用一些目录管理,将这些资源与您自己的资源分开。

    但无论如何,在这种情况下,您应该通过相对路径包含源。例如

    #include "../../Libpfs/colorspace/colorspace.h"
    

    或者,您可以将所有内容放在单独的 C++ 库中(静态 .lib 或动态 .dll)。在这种情况下,您应该将二进制文件放在 bin 路径中并将其添加为附加库目录(您自己项目的项目属性)并将所有头文件放在 include/Libpfs 路径中并将其添加为附加包含目录。在这种情况下,您应该将文件包含为。

    #include <Libpfs/colorspace/colorspace.h>
    

    关于另一个话题

    #define pow_F(a,b) (xexpf(b*xlogf(a)))
    

    我发现这个定义只有in the sources of the same source used above。 它似乎来自sleef,根据this,它应该会加快速度。但是您应该衡量这是否真的仍然正确,而不是进行复制粘贴/cargo cult 编程。 我认为通常您应该使用标准库std::pow,它具有floatdoublelong double 的重载。在大多数情况下,编译器会为您优化它的使用。

    【讨论】:

    • 是的,来源是正确的。通过相对路径添加源需要将每个 cpp 文件更改为相对路径。我不想。可以选择替代选项,但问题是项目没有可用的 .lib 或 .dll。
    • 是否会在附加的包含目录中添加 .h 文件的路径,并将所有 cpp 文件加载到 Visual Studio 项目工作的源代码中?
    • "项目没有可用的 .lib 或 .dll。" then make your own。第二个问题:可能是的。但可能还需要改变路径。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    相关资源
    最近更新 更多