随笔1 认识编译命令

1.认识编译命令

1.1 解释gcc编译命令: gcc test1.cpp -o test1 pkg-config --cflags --libs opencv

  1. 命令解析:
  • gcc:GNU C/C++ 编译器,用于编译C/C++代码。

  • test1.cpp:源代码文件。

  • -o test1:指定输出的可执行文件名为test1

  • pkg-config --cflags --libs opencvpkg-config是一个工具,用于查询库的编译和链接参数。

  1. pkg-config的作用:
  • --cflags:获取OpenCV头文件的路径(例如-I/usr/include/opencv)。

  • --libs:获取OpenCV库文件的路径(例如-L/usr/lib -lopencv_core -lopencv_imgproc)。

  1. 工作原理:
  • pkg-config会读取OpenCV的.pc文件(通常位于/usr/lib/pkgconfig目录下),从中提取头文件路径和库文件路径。
  • 编译器根据这些路径找到OpenCV的头文件和库文件,完成编译和链接。

2. 使用Makefile编译

以下是基于变量命名格式的Makefile文件:

c 复制代码
在这里插入代码片`# 定义变量
CC = gcc
CFLAGS = `pkg-config --cflags opencv`
LDFLAGS = `pkg-config --libs opencv`
SRC = test1.cpp
OBJ = test1.o
TARGET = test1

# 默认目标
all: $(TARGET)

# 编译规则
$(TARGET): $(OBJ)
	$(CC) $(LDFLAGS) -o $@ $<

$(OBJ): $(SRC)
	$(CC) $(CFLAGS) -c $< -o $@

# 清理生成的文件
clean:
	rm -f $(OBJ) $(TARGET)`

说明

  • CC:指定编译器。
  • CFLAGS:包含头文件路径。
  • LDFLAGS:包含库文件路径。
  • SRC:源文件。
  • OBJ:目标文件。
  • TARGET:最终生成的可执行文件。
  • clean:清理生成的文件。
    使用方法
  1. 将上述内容保存为Makefile。

  2. 在终端中运行:

bash 复制代码
make
  1. 清理文件:
bash 复制代码
make clean

3. 使用CMake编译

以下是CMakeLists.txt文件的编写方法:

c 复制代码
# CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(OpenCVTest)

# 设置C++标准
set(CMAKE_CXX_STANDARD 11)

# 查找OpenCV库
find_package(OpenCV REQUIRED)

# 添加源文件
add_executable(${PROJECT_NAME} test1.cpp)

# 链接OpenCV库
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})

使用方法

  1. 将上述内容保存为CMakeLists.txt

  2. 创建一个构建目录并进入:

c 复制代码
mkdir build
cd build
  1. 生成Makefile并编译:
c 复制代码
cmake ..
make
  1. 运行生成的可执行文件:
c 复制代码
./OpenCVTest

总结

pkg-config:动态获取OpenCV的头文件和库文件路径。
Makefile:通过变量和规则简化编译流程。
CMake:更高级的构建工具,适合复杂的项目。

相关推荐
陈桴浮海9 分钟前
【Linux&Ansible】学习笔记合集三
linux·运维·云原生·ansible
yuanmenghao20 分钟前
Linux 性能实战 | 第 10 篇 CPU 缓存与内存访问延迟
linux·服务器·缓存·性能优化·自动驾驶·unix
EnglishJun26 分钟前
Linux系统编程(二)---学习Linux系统函数
linux·运维·学习
VekiSon34 分钟前
Linux内核驱动——设备树原理与应用
linux·c语言·arm开发·嵌入式硬件
Trouvaille ~39 分钟前
【Linux】进程间关系与守护进程详解:从进程组到作业控制到守护进程实现
linux·c++·操作系统·守护进程·作业·会话·进程组
Pyeako1 小时前
opencv计算机视觉--LBPH&EigenFace&FisherFace人脸识别
人工智能·python·opencv·计算机视觉·lbph·eigenface·fisherface
Fcy6481 小时前
Linux下 进程(二)(进程状态、僵尸进程和孤儿进程)
linux·运维·服务器·僵尸进程·孤儿进程·进程状态
ZFB00011 小时前
【麒麟桌面系统】V10-SP1 2503 系统知识——救援模式显示异常
linux·kylin
第七序章1 小时前
【Linux学习笔记】初识Linux —— 理解gcc编译器
linux·运维·服务器·开发语言·人工智能·笔记·学习
格林威1 小时前
Baumer相机水果表皮瘀伤识别:实现无损品质分级的 7 个核心方法,附 OpenCV+Halcon 实战代码!
人工智能·opencv·计算机视觉·视觉检测·工业相机·sdk开发·堡盟相机