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命令
- 文件和目录操作:
ls: 列出文件和目录
cd: 切换目录
pwd: 显示当前工作目录
touch: 创建空文件或更新文件的访问时间
mkdir: 创建新目录
cp: 复制文件或目录
mv: 移动文件或目录
rm: 删除文件或目录
cat: 查看文件内容
more 或 less: 分页查看文件内容
head: 查看文件开头部分
tail: 查看文件结尾部分 - 文件内容处理:
grep: 在文件中搜索指定字符串
find: 在目录中查找文件
wc: 统计文件中的行数、字数和字节数
sort: 对文件内容进行排序
uniq: 删除文件中的重复行
cut: 从文件中截取字段
sed: 流编辑器,用于处理文本流 - 文件权限和所有权管理:
chmod: 修改文件或目录的权限
chown: 修改文件或目录的所有者和所属 - 系统信息查看:
date: 显示或设置系统时间和日期
uptime: 查看系统运行时间和负载
ps: 显示进程状态
top: 实时显示系统进程状态
df: 查看磁盘空间使用情况
du: 查看文件和目录的磁盘使用情况
- 网络命令: ping: 测试网络连通性
ifconfig 或 ip: 显示或配置网络接口信息
netstat: 显示网络状态信息
ssh: 安全远程登录
scp: 安全复制文件或目录
wget 或 curl: 下载文件或网页 - 系统管理:
reboot: 重启系统
shutdown: 关闭系统
useradd: 添加新用户
passwd: 修改用户密码
userdel: 删除用户
su: 切换用户
- 压缩和解压缩:
tar: 打包和解包文件 -xvf
gzip 或 gunzip: 压缩和解压缩文件
zip 或 unzip: 压缩和解压缩zip文件
<>和""的区别
- <>:用于包含系统提供的标准库头文件或编译器所附带的头文件。编译器会在系统默认的头文件搜索路径中查找这些头文件。通常,这些头文件的路径信息已经配置在编译器中,无需指定具体路径。示例:#include <stdio.h>
- "":用于包含用户自定义的头文件或在当前工作目录下的头文件。编译器会首先在当前源文件所在的目录中查找头文件,如果没有找到,则在系统默认的头文件搜索路径中查找。示例:#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