Makefile学习之路

一、缘起

  • 虽一直有学好makefile的发心,但并没有啥学习场景,看书吧又没找到合适的教材,这就尴尬了,好在除了面试问一嘴,其它场景上也没太用上。
  • 最近手上有两个单子,是跟make相关的,于是借着这一波,把知识串了一下。

    • 1、代码加编译开关,makeall的脚本里加编译参数
    • 2、新增了一个文件夹,编译没报错,生成.o文件了,没有生成执行文件

二、内容

1、项目前提

  • 用makeall的脚本来管理整个项目,这部分呢没完全懂呢

    • Makefile.incl里写了通用的配置,比如平台,编译和链接方式
    • 各个具体的文件夹内写了相应的Makefile,这个就比较简单好懂了,调用Makefile.incl后,然后列一些具体规则clean,all,build,install这些,当然还有一些变量

2、没有生成exe的解决

  • 开始是完全没有思路的。最开始时甚至是不知道可以用make+规则名。{测试问的我,我就先看了看}

    • 最开始以为是-I -l指定的zookeeper的include不对呢
    • 后来在具体文件夹下执行了下make build竟然能生成了,当时能生成,但不知道原因。
  • 知道问题后,想知道下在哪加入make build,就问了厂内大佬,需要在makeall的脚本里增加。

3、《GNU Make项目管理(3rd)》get到,1st

  • 3.1、Makefile是由规则组成的,规则本身分成3个部分(target,prerequisite,command),而规则又分为3种类型(explict,pattern,implict)
  • 3.2、通过make ruleName执行相应的规则,make也是可以调试的,怎么调还不太会
  • 3.3、除了自已定义的变量外(这都比较好懂),还有自动变量,比如$@、$%、$<、$?、$^等,必须要知道这些是啥意思,否则脚本看不懂。
  • 3.4、虽然书中”chap4讲了函数“,但工程里我没看到相应的。
  • 3.5、command虽然有默认的shell(/bin/sh),但也有可以指定(虽然没啥必要),tab来区分
  • 3.6、虽然看到了Makefile.incl里有ar命令,但不同的平台,好像又不太一样,这个具体啥意思,还不太熟悉
  • 3.7、书中"chap12makefile调试",看了一些常见的错误信息,但具体怎么调还没怎么看呢。

4、学习方法和心得

  • 4.1、找到合适的入门教材不容易,尤其在水平有点差,云里雾里的时候,最好有个实践环境,比如下个源代码,然后用命令编译,有感觉后再看书

    • 自已改改原来好的Makefile,再跑make build啥的,看报啥错
  • 4.2、如果项目中用的是Makefile,以项目为蓝本,把整个给吃透,通过查不会的关键字,再结合看书,把项目上的目前的Makefile吃透搞懂,再谈其它。

三、履历与参考书籍

1、履历

  • 20190809写第1版,读了“参考1”的Part1和Part2的chap11,12,目标是入门以及读懂工程中的make相关代码,以后能直接改错后面的用iReader smart再看看书吧

2、参考书籍

3、其它

你可能感兴趣的:(makefile)