Makefile和GCC日常用法

GCC

-I、-L、-l

gcc -o hello hello.c -I /home/hello/include-L /home/hello/lib –lworld

 

(大写i) -I/home/hello/include:表示将/home/hello/include目录作为第一个寻找头文件的目录,寻找顺序:/home/hello/include--> /usr/include --> /usr/local/include

 

-L /home/hello/lib:表示将/home/hello/lib目录作为第一个寻找库文件的目录,寻找顺序:/home/hello/lib --> /lib --> /usr/lib --> /usr/local/lib

 

(小写l)-lworld表示在上面的lib的路径中寻找libworld.so动态库文件(如果gcc编译选项中加入了“-static”表示寻找libworld.a静态库文件)

 

静态库连接

ar rcs libhycu.a *.o

 

动态链接通俗解析

http://www.cnblogs.com/likwo/archive/2012/05/09/2492225.html

 

-o0  //不优化代码,编译器不会对代码进行重排

 

-fPIC -share //http://blog.sina.com.cn/s/blog_54f82cc201011op1.html

 

gcc -MM first.c  

产生.h的依赖,输出first.o :first.c *.h

 

gcc -MD main.c

产生main.d文件,里面内容为:main.o:main.c

 

mkdep ${CFLAGS} ${SRCS}

产生.depend文件,里面内容时:main.o:main.c

 

 

 

 

Makefile

更多内容请看《Makefile详解》

 

$@、$^、$<

$@ 代表目标

$^ 代表所有的依赖对象

$< 代表第一个依赖对象

 

.c.o:

这句话的意思就是 %.o : %.c

也就是说,所有的.o文件,依赖于对应的.c文件

 

常用函数 

src=$(wildcard *.c ./sub/*.c)

dir=$(notdir $(src))

obj=$(patsubst %.c,%.o,$(dir) )

wildcard把 指定目录 ./ 和 ./sub/ 下的所有后缀是c的文件全部展开。

notdir把展开的文件去除掉路径信息

patsubst把$(dir)中的变量符合后缀是.c的全部替换成.o

 

 

 

未完待续

你可能感兴趣的:(C++,C)