009gcc、arm-linux-gcc和makefile

gcc的使用方法:

gcc [选项] 文件名

gcc常用选项

         -v 查看gcc编译器的版本,显示gcc执行时的详细过程

        -o 指定输出文件名为file

        -E 只预处理,不编译汇编链接。

        -S 只编译,不汇编链接

-c 编译和汇编,不链接

方式1:

gcc hello.c 输出一个a.out,然后./a.out来执行该应用程序

gcc -o hello hello.c 指定输出为hello可执行程序。

方式2:

预处理:gcc -E -o hello.i hello.c

编译:gcc -S -o hello.s hello.i

汇编:gcc -c -o hello.o hello.s

链接:gcc -o hello hello.o,将汇编生成的OBJ文件、系统库的OBJ文件、库文件链接,最终生成可在特定平台运行的可执行程序。

最后生成elf可执行程序

小结:

1、输入文件的后缀名和选项共同决定gcc到底执行哪些操作

2、在编译过程中,除非使用-E,-S,-c选项(或者编译出错),否则最后一步都是链接。

方式3、

gcc -c -o hello.o hello.s

gcc -o hello hello.o

gcc会对.c文件默认进行预处理操作,-c再来指明了编译、汇编,从而得到.o文件。

再通过gcc -o hello hello.o将.o文件进行链接,得到可执行程序。

crt1.o、crti.o、crtbegin.o、crtend.o、crtn.o是gcc加入的系统标准启动文件,
对于一般应用程序,这些启动是必需的。

-lc:链接libc库文件,其中libc库文件中就实现了printf等函数。


gcc -v -nostdlib -o hello hello.o会提示因为没有链接系统标准启动文件和标准库文件,而链接失败。
这个-nostdlib选项常用于裸机/bootloader、linux内核等程序,因为它们不需要启动文件、标准库文件。

一般应用程序才需要系统标准启动文件和标准库文件。
裸机/bootloader、linux内核等程序不需要启动文件、标准库文件。
 

makefile

组织管理程序。

规则:

目标:依赖1 依赖2

[TAB]命令

当目标文件不存在,或者某个依赖文件比目标文件新时。则执行该命令。

make [目标],若无目标,则默认第一个目标,如make clean执行clean下的规则。

语法:

1、通配符 :%.o

$@表示目标

$<表示第一个依赖文件

$^表示所有依赖文件

2、假想目标:.PHONY

.PHONY:clean  #防止当前目录下有clean这个文件,导致无法正常执行clean操作。

3、即时变量(简单变量)、延时变量、export

即时变量:

A := XXX   #A的值在定义时即可确定

B = xxx     #B的值使用到时才确定。

:=        #即时变量

=        #延时变量

?=        #延时变量,如果是第一次定义才起效,如果之前定义过了,则忽略该句

+=        #附加,它是即时变量还是延时变量取决于前面的定义

003_Makefile函数
a. $(foreach var,list,text)
b. $(filter pattern...,text)      # 在text中取出符合patten格式的值
   $(filter-out pattern...,text)  # 在text中取出不符合patten格式的值

c. $(wildcard pattern)            # pattern定义了文件名的格式,
                                  # wildcard取出其中存在的文件
d. $(patsubst pattern,replacement,$(var))  # 从列表中取出每一个值
                                           # 如果符合pattern
                                           # 则替换为replacement

004_Makefile实例
a. 改进: 支持头文件依赖
http://blog.csdn.net/qq1452008/article/details/50855810

gcc -M c.c // 打印出依赖

gcc -M -MF c.d c.c  // 把依赖写入文件c.d

gcc -c -o c.o c.c -MD -MF c.d  // 编译c.o, 把依赖写入文件c.d

b. 添加CFLAGS
c. 分析裸板Makefile

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值