2012.2.29 linux学习笔记 gcc makefile的使用

linux命令:
cat filename:查看文件内容
file filename:查看文件信息
clear:清屏
上箭头:重复上一次命令
ldd:打印可执行档依赖的共享库文件

vi的主要命令:
1.进入vi
vi filename:打开文件
vi +n filename:光标置于第n行首
vi + filename:置于最后一行
vi +/pattern filename:第一个于pattern匹配处
vi -r filename:恢复文件
vi filename ... filename:打开多个文件

2.移动光标
h:光标左移
l:光标右移
space:光标右移
backspace:光标左移
k或Ctrl+p:光标上移
j或Ctrl+n:光标下移
Enter:光标下移
w或者W:光标右移一个字
b或者B:光标左移一个字
e或者E:光标右移到字尾
):移到句尾
(:移到句首
}:移到段尾
{:移到段首
nG:移动到第n行首
n+:下移n行
n-:上移n行
n$:n行尾
H:屏幕顶行
M:中间行
L:最后行
0:当前行首
$:当前行尾

3.屏幕翻滚类
Ctrl+u:向前半屏
Ctrl+d:向后半屏
Ctrl+f:向后一屏
Ctrl+b:向前一屏

4.插入文本
i:光标前
I:当前行首
a:光标后
A:当前行尾
o:当前下新开一行
O:当前上新开一行
r:替换当前字符
R:替换当前字符和之后的字符,直到ESC
s:从当前光标位置开始:以输入的文本替代指定数目的字符
S:删除指定数目的行,并以所输入文本代替之
ncw,nCW:修改指定数目的字
nCC:修改指定数目的行
u:撤销动作
.:重复动作

5.删除命令
ndw,nDW:删除光标处开始之后的n-1个字
do:删到行首
d$: 删到行尾
ndd:删除当前以及之后n-1行
x或者X:删除一个字符 x光标后,X光标前
Ctrl+u:删除输入方式下所输入的文本

6.搜索和替换
yy:复制当前行
p:粘贴当前信息
/pattern:向后搜索pattern
?pattern:向前搜索pattern
n:在同一方向重复上一次搜索命令
N:在方方向上重复搜索
:s/p1/p2/g:将当前行中p1用p2替代
:n1,n2s/p1/p2/g:将n1到n2行替代
:g/p1/s//p2/g:文中所有p1换成p2


7.最后行方式命令
:n1,n2 co n3:将n1到n2行之间的内容拷贝到n3下
:n1,n2 m n3:将n1行到n2行之间的内容移到n3下
:n1,n2 d:删除n1-n2
:w:保存当前文件
:e filename:打开文件进行编辑
:x:保存当前文件并退出
:q:退出
:q!:不保存退出
:!command:执行shell命令command
:n1,n2 w!command:将文件中n1到n2行的内容作为command的输入并执行之,若不指定n1,n2则表示将整个文件内容作为command的输入
:r!command:将命令command的输出放到当前行

GCC对默认文件的处理包含了文本文件和二进制文件两种,
其中文本文件包括以下类型:
*.c            C语言源文件
*.C\*.cxx\*.cc        C++语言源文件
*.i            预处理后的C语言源文件
*.ii            预处理后的C++语言源文件
*.s\*.S            汇编语言文件
*.h            头文件
二进制文件包含以下类型:
*.o             目标文件
*.so            动态库
*.a            静态库

gcc的使用:
gcc file1 file2 file3:使用gcc处理多个文件
从C语言到最终的可执行程序,主要分为两个阶段:
将各个C语言的源文件生成目标文件 *.o;-g表示包含调试信息,-Wall表示输出所有的警告,-I表示包含当前目录作为头文件搜索路径,-pipe表示使用管道替换临时文件,-o 指定目标文件的名称
gcc -pipe -g -Wall -I -c -o file.o file.c
将各个目标文件进行连接生存可执行程序.test为输出文件
gcc -Wall -g file.o -o test
生成静态连接的执行程序,用-static,包含所有使用的库函数,大很多,运行时不用加载
gcc -Wall -g file.o -static -o test_static

-c    编译生存object文件
-s    生成汇编代码
-g    生存可被gdb使用的标准调试信息
-O0    不优化
-O O1    一般优化
-O2    更多优化
-O3    更多优化
-w     不产生警告
-Wall    生存所有级别警告信息

生成动态库
gcc -shared -Wall -g file1.o file2.o -o libtest_d.so
生成可执行文件,lib必须缺省,不然会报错
gcc -Wall -g main.o -L. -ltest_d -o test_dlib
如果直接运行,可能产生错误,linux会在 /usr/lib中搜索所需的库,需要修改环境变量,把当前路径增加为动态库的搜索地址。
export LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH

make和makefile
如下所示编写Makefile文件:
all:
        @echo "++++++++make all+++++++++++";
rule0:
        @echo "Input = ${INPUT}";
        @echo "This Target is $@";
.PHONY:clean
clean:
        @echo "---------clean-----------";
                                         
在命令行输入make 执行all
输入make clean,执行clean中内容
输入 make rule0 INPUT = abc 将INPUT的值赋给 Input 并显示his Target is rule0

Makefile中依赖关系
all:rule0 file.o
rule0:rule1  
        @echo "++++++++rule0+++++++++++";
        @echo "The deps:$^";
        @echo "The target:$@";
rule1:rule2
        @echo "++++++++rule1+++++++++++";
rule2:rule3  
        @echo "++++++++rule2+++++++++++";
rule3:
        @echo "++++++++rule3+++++++++++";
file.o:
        @echo "1234567890">file.o
        @echo "File path:$(@D) File name: $(@F)"
.PHONY:clean rule0 rule1 rule2 rule3
clean:
        @echo "---------clean-----------";
        rm -f file.o


@D :表示目标的所在目录的路径
@F :目标文件名
$^ : 依赖的所有文件
$@ : 目标的名称

在Makefile中,将PHONY后的内容定义为伪目标:这是由于他们不是需要生成的内容的名称,file.o是实际生成的结果,因此他是真实的目标,不是伪目标.
第二次执行make时将不再显示该句,file.o 依赖的内容没有变化,所以不需要被执行
File path:. File name: file.o
执行make clean,删除了file.o文件,此时执行make回到一次执行的状态
make -n:显示执行的序列

使用隐含规则来编译程序
CC := gcc
HEAD := getarg.h
SRC := getarg.c writeinfo.c main.c
OBJS := getarg.o writeinfo.o main.o
TT := test

Files = $(wildcard ./*)

INC = .
CFLAGS = -pipe -g -Wall -I$(INC)
LDFLAGS = -Wall -g

all:$(TT)

$(TT):$(OBJS)
        @echo "++++++++Build Standalone Programe: $@ +++++"
        $(CC) $(LDFLAGS) $(OBJS) -o $@
    
libtest_d.so:getarg.o writeinfo.o
        @echo "++++++++Build Dynamic lib:$@+++++++++++++++";
        $(CC) -shared $(LDFLAGS) getarg.o writeinfo.o -o $@
filelist:
        @echo "<<<<Files in this folder>>>>";
        @file $(Files);

.PHONY:clean filelist
%.o:%c
        $(CC) $(CFLAGS) -c $< -o $@
clean:
        echo "--------clean------------";
        rm -f *.o;
        rm -f $(TT);
        rm -f libtest_d.so
        rm -f test_dlib


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值