嵌入式——10 LinuxC

linuxC:

makefile包含哪几部分

目标、依赖、命令

编译器和编译选项

CC := gcc

CFLAGS := -Wall -Werror -g -c # 目标文件和可执行文件名

OBJ_FILES := main.o utils.o

TARGET := my_program

默认规则:生成可执行文件

(TARGET): (OBJ_FILES)

(CC) (CFLAGS) \^ -o @

生成目标文件 main.o

main.o: main.c utils.h

(CC) (CFLAGS) -c \< -o @

生成目标文件 utils.o

utils.o: utils.c utils.h

(CC) (CFLAGS) -c \< -o @

伪目标:清理临时文件 特殊规则(还可以安装文件)

.PHONY: clean

clean:

rm -f (TARGET) (OBJ_FILES)

注释以 # 开头,@表示目标文件,@ 表示目标文件,@表示目标文件,< 表示第一个依赖文件,$^ 表示所有依赖文件等。

linux命令

  1. 文件和目录操作:
    ls: 列出文件和目录
    cd: 切换目录
    pwd: 显示当前工作目录
    touch: 创建空文件或更新文件的访问时间
    mkdir: 创建新目录
    cp: 复制文件或目录
    mv: 移动文件或目录
    rm: 删除文件或目录
    cat: 查看文件内容
    more 或 less: 分页查看文件内容
    head: 查看文件开头部分
    tail: 查看文件结尾部分
  2. 文件内容处理:
    grep: 在文件中搜索指定字符串
    find: 在目录中查找文件
    wc: 统计文件中的行数、字数和字节数
    sort: 对文件内容进行排序
    uniq: 删除文件中的重复行
    cut: 从文件中截取字段
    sed: 流编辑器,用于处理文本流
  3. 文件权限和所有权管理:
    chmod: 修改文件或目录的权限
    chown: 修改文件或目录的所有者和所属
  4. 系统信息查看:

date: 显示或设置系统时间和日期

uptime: 查看系统运行时间和负载

ps: 显示进程状态

top: 实时显示系统进程状态

df: 查看磁盘空间使用情况

du: 查看文件和目录的磁盘使用情况

  1. 网络命令: ping: 测试网络连通性
    ifconfig 或 ip: 显示或配置网络接口信息
    netstat: 显示网络状态信息
    ssh: 安全远程登录
    scp: 安全复制文件或目录
    wget 或 curl: 下载文件或网页
  2. 系统管理:
    reboot: 重启系统
    shutdown: 关闭系统
    useradd: 添加新用户
    passwd: 修改用户密码

userdel: 删除用户

su: 切换用户

  1. 压缩和解压缩:
    tar: 打包和解包文件 -xvf
    gzip 或 gunzip: 压缩和解压缩文件
    zip 或 unzip: 压缩和解压缩zip文件

<>和""的区别

  1. <>:用于包含系统提供的标准库头文件或编译器所附带的头文件。编译器会在系统默认的头文件搜索路径中查找这些头文件。通常,这些头文件的路径信息已经配置在编译器中,无需指定具体路径。示例:#include <stdio.h>
  2. "":用于包含用户自定义的头文件或在当前工作目录下的头文件。编译器会首先在当前源文件所在的目录中查找头文件,如果没有找到,则在系统默认的头文件搜索路径中查找。示例:#include "my_header.h"

#ifndef的作用

#ifndef是C语言预处理指令中的条件有编译指令之一,其作用是防止头文件被多次包含,从而避免重复定义错误。

#ifndef HEADER_FILE_NAME_H

#define HEADER_FILE_NAME_H

// 头文件内容

#endif

gdb调试

启动GDB:在终端中运行gdb命令,然后在GDB提示符中输入要调试的可执行文件的路径,例如:gdb ./my_program。

设置断点: 使用break命令设置断点,例如:break main在main函数处设置断点。

运行程序:在GDB中使用run或r命令运行程序,例如:run。

单步执行:使用step或s命令单步执行程序,按行执行并进入函数。

运行到断点:使用continue或c命令运行程序,直到遇到下一个断点。

查看变量:使用print或p++命令查看变量的值,例如:print my_variable。++

查看堆栈:使用backtrace或bt命令查看函数调用堆栈。

跟踪变量:使用watch命令跟踪 变量的值变化,例如:watch my_variable。

删除断点:使用delete命令删除断点,例如:delete 1删除序号为1的断点。

退出GDB:使用quit或q命令退出GDB。

gcc编译步骤

预处理:对以#号开头的内容进行替换,不会检查语法错误。

gcc -E hello.c -o hello.i

编译:对代码进行编译,可以检查语法错误 。

gcc -S hello.i -o hello.s

汇编:将汇编代码转换成机器代码。

gcc -c hello.s -o hello.o

链接:将目标文件和其他可能需要的库文件链接在一起,生成可执行文件。

gcc hello.o -o hello

相关推荐
LCMICRO-133108477464 小时前
长芯微LDC90810完全P2P替代ADC128D818,是一款八通道系统监控器,专为监控复杂系统状态而设计。
stm32·单片机·嵌入式硬件·fpga开发·硬件工程·模数转换芯片adc
祝大家百事可乐9 小时前
嵌入式——07 单片机
硬件工程
学嵌入式的小杨同学1 天前
STM32 进阶封神之路(十六):PWM 波深度实战 —— 定时器输出 + LED 调光 + 电机调速(库函数 + 寄存器)
stm32·单片机·嵌入式硬件·mcu·硬件架构·硬件工程·智能硬件
祝大家百事可乐1 天前
储能系统——03 储能系统架构分析
硬件工程
上海合宙LuatOS2 天前
LuatOS核心库API——【 string】字符串操作
运维·服务器·物联网·junit·硬件工程·信息与通信·嵌入式实时数据库
上海合宙LuatOS2 天前
LuatOS核心库API——【sys】LuatOS运行框架
运维·服务器·物联网·硬件工程·lua·软件工程·信息与通信
LCMICRO-133108477462 天前
长芯微LDC64115完全P2P替代AD4115,是一款低功耗、低噪声、24位、Σ-Δ(Σ-Δ)模数转换器(ADC)
stm32·单片机·嵌入式硬件·fpga开发·硬件工程·模数转换器
YY_Share2 天前
N MOS和 P MOS 的区别
硬件工程
祝大家百事可乐2 天前
静止同步调相机——01 高压 SVG/STATCOM 解析
硬件工程