cpp 项目依赖管理
在 C++ 项目中添加依赖主要涉及到两个方面:在代码中包含头文件,以及在构建系统中链接对应的库。#include 指令是用于包含头文件的,而链接库通常在项目的构建配置中指定,如使用 Makefile、CMake 或是 Visual Studio 项目文件。
如何添加依赖
-
包含头文件: 使用
#include指令将依赖的库的头文件包含到你的源文件中。这使得库中定义的函数、类、变量等可在你的源文件中使用。 -
链接库文件: 仅仅包含头文件通常不够,因为头文件只包含了函数声明,而函数的实际实现通常在编译后的库文件中(.lib、.a、.so、.dll 等)。你需要在项目的构建系统中指定这些库文件的路径,以便在编译链接阶段链接这些库。
例如在构建系统中链接 OpenCV 库:
使用 CMake:
find_package(OpenCV REQUIRED) // 查找 OpenCV
include_directories(${OpenCV_INCLUDE_DIRS}) // 添加头文件目录
target_link_libraries(your_project_name ${OpenCV_LIBS}) // 链接 OpenCV 库到你的项目
使用 Makefile:
CXXFLAGS += -I/path/to/opencv/include
LDFLAGS += -L/path/to/opencv/lib -lopencv_core -lopencv_imgproc -lopencv_highgui
#include 指令的 <> 和 ""
在 C++ 中,#include 指令可以带有尖括号 (<>) 或双引号 (""),它们之间的主要区别在于编译器搜索头文件的方式:
-
#include <filename>: 尖括号用于包含标准库头文件或其他外部库头文件。编译器会在标准库路径和其他通过编译器选项(如-I在 GCC 和 Clang 中)指定的路径中搜索这些文件。尖括号表明文件相对于这些路径是外部的。 -
#include "filename": 双引号用于包含项目内的头文件。编译器首先在包含指令的文件所在的相同目录中搜索头文件;如果在那里找不到,编译器就会像处理尖括号形式一样,在标准库路径和其他指定路径中搜索。这意味着,使用双引号时,你可以更方便地引用相对路径的头文件,这在项目内部组织代码时非常有用。
例如在代码中包含 OpenCV 头文件:
#include <opencv2/opencv.hpp> // 使用尖括号,因为它是外部库的头文件