原创: 杂谈_gcc,make和cmake
gcc,make,cmake关系
1.gcc是GNU Compiler Collection(就是GNU编译器套件),也能够简略认为是编译器,它能够编译很多种编程语言(括C、C++、Objective-C、Fortran、Java等等)。
2.当你的程序只有一个源文件时,间接就能够用gcc命令编译它。
3.然而当你的程序蕴含很多个源文件时,用gcc命令一一去编译时,你就很容易凌乱而且工作量大
4.所以呈现了make工具
make工具能够看成是一个智能的批处理工具,它自身并没有编译和链接的性能,而是用相似于批处理的形式—通过调用makefile文件中用户指定的命令来进行编译和链接的。
5.makefile是什么?简略的说就像一首歌的乐谱,make工具就像指挥家,指挥家依据乐谱指挥整个乐团怎么样演奏,make工具就依据makefile中的命令进行编译和链接的。
6.makefile命令中就蕴含了调用gcc(也能够是别的编译器)去编译某个源文件的命令。
7.makefile在一些简略的工程齐全能够人工手下,然而当工程十分大的时候,手写makefile也是十分麻烦的,如果换了个平台makefile又要从新批改。
8.这时候就呈现了Cmake这个工具,cmake就能够更加简略的生成makefile文件给下面那个make用。当然cmake还有其余性能,就是能够跨平台生成对应平台能用的makefile,你不必再本人去批改了。
9.可是cmake依据什么生成makefile呢?它又要依据一个叫CMakeLists.txt文件(学名:组态档)去生成makefile。
10.到最初CMakeLists.txt文件谁写啊?亲,是你本人手写的。
11.当然如果你用IDE,相似VS这些个别它都能帮你弄好了,你只须要按一下那个三角形
12.cmake是make maker,生成各种能够间接管制编译过程的控制器的配置文件,比方makefile、各种IDE的配置文件。
13.make是一个简略的通过文件工夫戳管制主动过程、解决依赖关系的软件,这个主动过程能够是编译一个我的项目。
原文件—cmakelist —cmake —makefile —make —生成可执行文件(make中则蕴含了多条链接以及gcc/g++编译语句)。
简略了解
cmake和autotools正是makefile的下层工具,它们的目标正是为了产生可移植的makefile,并简化本人入手写makefile时的微小工作量。如果你本人入手写过makefile,你会发现,makefile通常依赖于你以后的编译平台,而且编写makefile的工作量比拟大,解决依赖关系时也容易出错。因而,对于大多数我的项目,该当思考应用更自动化一些的 cmake或者autotools来生成makefile,而不是上来就入手编写。
INCLUDE_DIRECTORIES:增加头文件目录
LINK_DIRECTORIES:增加须要链接的库文件目录
LINK_LIBRARIES:增加须要链接的库文件门路,留神这里是全门路
附录
GCC 和 cmake的关系?:https://www.zhihu.com/questio...
cmake疾速入门:https://blog.csdn.net/kai_zon...
cmake 从放弃到入门 - 醍醐灌顶(比拟残缺的案例,强烈推荐):https://blog.csdn.net/iceboy3...
cmake中的link_directories, LINK_LIBRARIES, target_link_libraries的区别:https://www.jianshu.com/p/542...
Linux下gcc/g++、make和cmake的区别:https://www.cnblogs.com/bokey...