Makefile和GCC日常用法

2015/12/09 - C/C++

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

未完待续


如果文章对您有帮助,欢迎扫描下方二维码赞助(一分也是爱噢),谢谢

Search

    一分也是爱噢 一分也是爱

    目录