- MySQL
- Oracle
- poi
- epoll
- redis
- log4cpp
- socket
- C/S模式
- C++, Java, Python
- STL
- Linux环境编程
- GDB
- Make
- 多线程编程
- git,github
GDB
- 1.编译时加上-g
$ g++ *.cpp -g
- 2.执行时
或者分两步$ gdb a.out
$ gdb (gdb)file a.out
- 命令
命令 | 含义 | 对应windows |
---|---|---|
l | 显示代码 | |
r | 开始运行 | F9 |
b 4 | 在第四行设置断点 | F5 |
info b | 查看所有断点 | |
delete [断点号] | 查看所有断点 | |
n | 下一步,不进入函数 | F10 |
s | 表示单步进入函数 | F11 |
p i | 打印变量i | |
c | 继续运行,直到函数结束或遇到新的断点 | |
q | 退出 |
Make
格式:
target: dependency_files
< tab > command
.PHONY是Makefile文件的关键字,表示它后面列表中的目标均为伪目标。伪目标通常用在清理文件、强制重新编译等情况下
自定义文件名的话,比如makename执行时在后面加上-f makename
make -f makename
变量函数与规则
随着项目越来越大,源文件也越来越复杂,这个时候就要用到变量,写出通用性较强的makefile文件
定义变量的两种方法
- 1.变量名=变量值 递归变量展开(几个变量共享一个值) //不常用
- 2.变量名:=变量值 简单变量展开(类似于C++的赋值) //常用
变量分为; 用户自定义变量,预定义变量(CFLAGS),自动变量,环境变量
自动变量:指在使用的时候,自动用特定的值替换,常用的有:
变量 | 说明 |
---|---|
$@ | 当前规则的目标文件(重点) |
$< | 当前规则的第一个依赖文件 |
$^ | 当前规则的所有依赖文件,以空格分隔(重点) |
$? | 规则中日期新于目标文件的所有相关文件列表,逗号分隔 |
$(@D) | 目标文件的目录名部分 |
$(@F) | 目标文件的文件名部分 |
预定义变量:内部事先定义好的变量,但是它的值是固定的,并且有些的值是为空的。
- AR: 库文件打包程序默认为ar
- AS: 汇编程序,默认为as
- CC: c编译器默认为cc
- CPP: C预编译器,默认为$(CC) -E
- CXX: C++编译器,默认为g++
- RM: 删除,默认为rm -f
- ARFLAGS: 库选项,无默认
- ASFLAGS: 汇编选项,无默认
- CFLAGS: c编译器选项,无默认
- CPPFLAGS: c预编译器选项,无默认
- CXXFLAGS: c++编译器选项
函数
1.wildcard : 搜索当前目录下的文件名,展开成一列所有符合由其参数描述的文件名,文件间以空格间隔。
SOURCES=$(wildcard *.cpp)
把当前目录下所有.cpp文件存入变量SOURCES里。2.字符串替换函数: $(patsubst要查找的子串,替换后的目标子串,源字符串)。将源字符串(以空格分隔)中的
所有要查找的子串替换成目标子串。如OBJS=$(patsubst %.cpp,%.o,$(SOURCES))
把SOURCES中的.cpp替换为.o3.$(addprefix 前缀,源字符串)函数把第二个参数列表的每一项前缀上第一个参数值???
下面是一个较为通用的makefile:
DIR := ./debug
EXE := $(DIR)/main.exe
CC := g++
LIBS :=
SRCS := $(wildcard *.cpp) $(wildcard *.c) $(wildcard *.cc)
OCPP := $(patsubst %.cpp, $(DIR)/%.o, $(wildcard *.cpp))
OC := $(patsubst %.c, $(DIR)/%.co, $(wildcard *.c))
OCC := $(patsubst %.cc, $(DIR)/%.cco, $(wildcard *.cc))
OCC := $(OC) $(OCC) $(OCPP)
RM := rm -rf
CXXFLAGS := -Wall -g
start : mkdebug $(EXE)
mkdebug :
@if[! -d $(DIR)]; then mkdir $(DIR); fi;
$(EXE) : $(OBJS)
$(CC) -o $@ $(OBJS) $(addprefix -l, $(LIBS))
$(DIR)/%.o : %.cpp
$(CC) -c $(CXXFLAGS) $< -o $@
$(DIR)/%.co : %.c
$(CC) -c $(CXXFLAGS) $< -o $@
$(DIR)/%.cco : %.cc
$(CC) -c $(CXXFLAGS) $< -o $@
.PHONY : clean rebuild
clean :
@D$(RM) $(DIR)/*.exe $(DIR)/*.o $(DIR)/*.co $(DIR)/*.cco
rebuild : clean start
make的命令行选项
命令格式 | 含义 |
---|---|
-C dir | 读入指定目录下的makefile |
-f file | 读入当前目录下的file文件作为makefile |
-i | 忽略所有的命令行执行错误 |
-I dir | 指定被包含的makefile所在目录 |
-n | 只打印要执行的命令,但不执行这些命令 |
-p | 显示make变量数据库和隐含规则 |
-s | 在执行命令时不显示命令 |
-w | 如果make在执行过程中改变目录, 则打印当前目录名 |
采用for循环编译多个目标文件的Makefile写法
…