深入Linux(四): Makefile知识点

Makefile

目录

备忘

  • Makefile官方教程(英文)
  • 一个makefile教程网址
  • 一步编译链接 gcc -o hello hello.c 或者 gcc hello.c -o hello . (理解了getopts就明白为什么可以这么写)。 这里的一步编译链接等价于后续的-c -o两个步骤,即gcc -c hello.cgcc -o hello hello.o(或者写成 gcc hello.o -o hello也可以), 推荐使用高亮的一步编译或两步编译命令
我们用gcc编译程序时,可能会用到“-I”(大写i),“-L”(大写l),“-l”(小写l)等参数,下面做个记录:例:
gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -lworld

上面这句表示在编译hello.c时:

-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

-lworld表示在上面的lib的路径中寻找libworld.so动态库文件或libworld.a静态库文件(如果两者都有,则链接器会优先链接动态库, 如果gcc编译选项中加入了“-static”表只寻找libworld.a静态库文件)
  • makefile例子 见mk_example.mk

Makefile基础

  • 语法格式如下:
TARGETS : PREREQUISITES
【TAB】 COMMAND
         ...     # 在执行TRAGETS后面的COMMAND之前必须提前构建依赖项PREREQUISITES

Makefile中的命令

  • 必须要以[Tab]键开始,如上一条例子中的 cc -c kbd. c 就必须以Tab键开头
  • 如果make执行的命令前面加了@字符,则不显示命令本身而只显示它的结果
  • 通常make执行的命令如果出错(该命令的退出状态非0)就立刻终止,不再执行后续命令,但如果命令前面加了-号,即使这条命令出错,make也会继续执行后续命令
  • 在 Makefile 中书写在同一行中的多个命令属于一个完整的 shell 命令行,书写在独立行的一条命令是一个独立的 shell 命令行。因此:在一个规则的命令中,命令行“ cd”改变目录不会对其后的命令的执行产生影响。就是说其后的命令执行的工作目录不会是之前使用“cd”进入的那个目录。如果要实现这个目的, 就不能把“cd”和其后的命令放在两行来书写。而应该把这两条命令写在一行上,用分号分隔。这样它们才是一个完整的 shell 命令行
  • make的命令行选项
    • -k: 它的作用是让make命令在发现错误时仍然继续执行, 而不是在检测到第一个错误时就停下来。 你可以利用这个选项在一次操作中发现所有未编译成功的源文件。
    • -n: 它的作用是让make命令输出将
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值