Cmake实践
- CURL:是利用URL语法在命令行下工作的传输工具
- cmake是跨平台项目管理工具,它用更抽象的语法来组织项目。虽然,仍然是目标,依赖之类的东西,但更为抽象和友好,比如你可用math表示数学库,而不需要再具体指定到底是math.dll还是libmath.so,在windows下它会支持生成visual studio的工程,在linux下它会生成Makefile,甚至它还能生成eclipse工程文件。也就是说,从同一个抽象规则出发,它为各个编译器定制工程文件。
- make用来执行Makefile,cmake用来执行CMakeLists.txt,qmake用来处理*.pro工程文件。Makefile的抽象层次最低,cmake和qmake在Linux等环境下最后还是会生成一个Makefile。cmake和qmake支持跨平台,cmake的做法是生成指定编译器的工程文件,而qmake完全自成体系。
- gcc、make、cmake
1、gcc
- 功能:它是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器,它可以编译很多种编程语言(括C、C++、Objective-C、Fortran、Java等等)。
- 使用场景:程序只有一个源文件时,直接就可以用gcc命令编译它。
- 不适用的场景:如果我们的程序包含很多个源文件时,用gcc命令逐个去编译时,就发现很容易混乱而且工作量大,所以出现了make工具。
2、make
- 功能:make工具类似于批处理工具,可以对多个源文件进行批量地编译和链接;make工具本身不具备编译和批处理功能,它是通过调用makefile文件中的命令实现编译和链接。【makefile命令中就包含了调用gcc(也可以是别的编译器)去编译某个源文件的命令】
- 适用场景:多行gcc命令;简单工程
- 不适用场景:当工程非常大的时候,手写makefile也是非常麻烦的,如果换了个平台makefile又要重新修改,这时候就出现了下面的Cmake这个工具。
3、cmake
- 功能:类似的工具有GNU Make QT的qmake , 微软的MS nmake … 但是这些工具遵循着不同的规范、在面对跨平台的问题下,就显得捉襟见肘,cmake 能较好处理这个,Cmake工具的功能就是用来生成makefile文件,以便make工具进行调用;Cmake工具根据CMakeLists.txt(组态档)文件生成makefile文件;而CMakefile文件是需要程序员自己编写的,或者借助IDE生成;
- 适用场景: 在每一种标准下写一次makefile . 另外makefile的编写比较麻烦。为了解决这些问题,Cmake应运而生。
4、总结
其他:pkgconfig:cmake跟已有体系配合的不是特别理想,比如pkgconfig
对于一个比较大第三方库,其头文件和库文件的数量是比较多的。如果我们一个个手动地写,那将是相当麻烦的。所以,pkg-config就应运而生了。pkg-config能够把这些头文件和库文件的位置指出来,给编译器使用。