https://www.zhihu.com/question/27455963/answer/36722992
1、CMakeLists.txt由用户完成
2、cmake根据CMakeList.txt文件生成makefile;makefile文件是基于平台的;
3、make工具:可以看成一个智能的批处理工具,它本身没有编译和链接功能,而是用类似于批处理的方式,通过调用makefile文件中用户指定的命令在进行编译和链接;
4、makefile:简单来说相似一首歌的乐谱,而make工具就是指挥家;make工具就根据makefile中的命令进行编译和链接的;
在makefile命令中就包含了调用gcc(或别的编译器)去编译某个源文件;makefile文件是基于平台的;
5、当你的程序只有一个源文件时,可以直接用gcc命令编译它;
6、qmake:qmake是区别于cmake存在的,是针对QT开发框架的;
(1)QT程序进行编译前就必须调用moc(The Meta-Object Compiler)和uic(User Interface Compiler)对源文件进行预处理,然后再调用编译器进行编译;QT是对C++进行了扩展,你写的一行代码,QT在背后帮你写了千百行,而这些多出来的代码就是靠qt专有的moc和uic编译器来进行处理;
(2)qmake是根据Qt工程文件(.pro)来生成对应的makefile的;这种专用的makefile文件能自动调用moc和uic对源程序进行预处理和编译;
(3)qmake也是跨平台的,跟cmake一样能对应各种平台生成对应的makefile文件;
(4)qmake也可以独立于它的IDE,也可以用在非QT工程上面,照样可以生成普通的makefile,只要再pro文件中加入CONFIG -= qt就可以了;
(5)cmake同样支持QT程序的,也能生成针对qt程序的那种特殊makefile,只是cmake的CMakeLists.txt写起来比qmake的pro文件复杂;