我正在尝试为我正在开展的一个小项目学习GNUMake。到目前为止,即使是“基本”教程看起来也很粗糙,我还没有理解makefile语法。
有没有人有一些好的资源让绝对的初学者熟悉GNUMake?
答案 0 :(得分:13)
权威指南是http://www.gnu.org/software/make/manual/make.html
有一本书“用GNU Make管理项目”这本书有更多的解释。
你也可以使用早期的版本,它们并没有特别涵盖GnuMake,但它们更薄。
Make是开发人员之间的一个肮脏的秘密 - 我们都不理解它,我们只是从其他人那里借用一个make脚本并进行更改。我想只有一个脚本是从头开始编写的(可能是工具的创建者)。
当你需要做的不仅仅是简单的例子时,大多数人都会切换到像Ant这样的更现代的构建系统,或者在Perl / Python /等中自行编译。
答案 1 :(得分:3)
make最常用的功能可以分解为几个简单的概念,目标,依赖项和变量。
目标是您要构建的内容,但目标下的命令可以是编译器命令或脚本。通常,每个目标都指代代码中的一个模块,但您可以根据需要将这些模块制作成适合您项目的模块。
依赖项是项目中的文件或其他目标。最好的例子是一个C项目,你从一堆目标文件构建二进制文件。在构建二进制文件之前,每个目标文件都需要存在,因此make将遍历目标,直到所有依赖项都已完成,然后为整个目标运行命令。
变量并不总是必需的,但对于处理编译器标志之类的东西非常方便。规范示例是CC和CCFLAG,它们将引用您使用的编译器,即gcc和像-ansi -Wall -o2这样的标志。
一些更一般的提示和技巧:
答案 2 :(得分:3)
"使用GNU Make管理项目,第3版"被置于" GNU自由文档许可证"并且可以免费在线合法阅读:link。
答案 3 :(得分:2)
我赞同O'Reilly的书籍建议。
有关一些有用的提示,技巧和见解,请查看Mr. Make articles
答案 4 :(得分:0)
mgb:那更糟糕的是。我曾经从头开始编写一个复杂的make系统(几千个文件,五十或一百个目录,四个或五个编译器和交叉编译目标,两个OS等)。我坐下来,先了解内外的gnu make,设计了系统,首先使用原型。我们对结果非常满意。
但那是多年前的事了。你知道我今天怎么写的吗?你描述的方式相同。它只是非常繁琐,语法细节也不够明显,除非你经常这样做,否则你不记得细节了。就像任何其他使用非直观语法和一些古怪规则的语言一样,我想。
答案 5 :(得分:0)
我不是GNU信息系统的忠实粉丝,但我发现GNU make info页面非常有用。一旦你知道了非常基本的概念和大致可用的东西,我发现信息页面是引用信息的最快方式,例如预建函数。
(忘记GNU info
计划,然后使用例如pinfo
。)