Makefile学习之路

1、缘起

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

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

2、内容

一、项目前提

  • 用makeall的脚原本管理整个项目,这部分呢没彻底懂呢github

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

二、没有生成exe的解决

  • 开始是彻底没有思路的。最开始时甚至是不知道能够用make+规则名。{测试问的我,我就先看了看}面试

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

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

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

四、学习方法和心得

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

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

3、履历与参考书籍

一、履历

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

二、参考书籍

三、其它

相关文章
相关标签/搜索