您的位置:首页 > 运维架构 > Linux

2012.2.29 linux学习笔记 gcc makefile的使用

2012-03-01 09:22 357 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: