Make
- 20世纪70年代发明出来的一种工具,辅助完成编程项目的编译工作,主要用于unix(包括linux)环境下。
- make的编译思路:在源代码发生变化,需要重新构建目标或者其他输出文件时,make会根据时间戳查看哪些文件发生了变化,对发生变化的文件重新进行构建,未发生变化的文件则不执行构建,以节约编译时间。
GNU make
- make工具的GNU版本,属于自由软件,先已经成为了工业标准。
- make 的使用
- 在unix系统的终端(shell)任一目录下,输入命令【make】,就可以调用 make 工具。
- make 工具会在当前目录下依次按照GNUmakefile,makefile,Makefile顺序,寻找Makefile文件。如果找到其中任何一个,就读取该makefile文件并按照其中的规则执行,否则就报错。
- make 命令选项
- make命令是可以接收参数的。格式: make 【选项】【宏定义】【目标】
- 选项可以制定make的工作行为,宏定义可以制定执行Makefile的宏值,目标则是Makefile中的目标,包括伪目标。这些参数均可选,参数之间使用空格分隔。
- 可以在shell下输入 【man make】查看make的相关参数及其用法
cmake
- cmake是抽象层次更高的项目管理工具
- cmake通过CMakeLists.txt生成makefile文件,
qmake
- qmake是Qt专用的项目管理工具,对应的工程文件是*.pro
- 在Linux下面它也会生成Makefile,在命令行下才会需要手动执行qmake,可以在qtcreator IDE下面打开*.pro文件
Makefile 文件
- makefile命令中包含了调用gcc(也可以是别的编译器)去编译某个源文件的命令
- Linux下,对于小工程,可以手动编写Makefile文件,对程序编译进行精确控制;对于大工程,手动编写Makefile文件,工作量很大,需要使用automake工具,通过简单配置,自动生成Makefile文件。
- makefile 编写较为复杂,有许多复杂的用法,但其基本语法格式简单:
target: prerequisties # target是编译目标,prerequisties是依赖关系文件, command # command是生成target所需执行的命令 # 在 prerequisites 中,如果有一个以上的文件比 target 文件要新的话,command 所定义的命令就会被执行。
总结
- make的抽象层次最低,cmake/qmake抽象层次较高,且支持跨平台。
- cmake同样支持Qt程序,cmake也能生成针对qt 程序的makefile。但cmake的CMakeLists.txt 写起来相对与qmake的pro文件复杂。qmake 是为 Qt 量身打造的,使用非常方便,但是cmake功能比qmake强大。
- 一般的Qt工程直接使用qmake,cmake的强大功能一般人是用不到的。