摘要
- CMakeLists中add_executable(可执行文件, src1,src2,src3…)
linux查看gcc/cmake/当前版本的方法为:
1 | cmake --version |
g++ 和 gcc 的区别
- gcc是GCC中的GUN C Compiler(C 编译器)
- g是GCC中的GUN C Compiler(C++编译器)
gcc和g++的主要区别
对于 .c和.cpp文件,gcc分别当做c和cpp文件编译(c和cpp的语法强度是不一样的)
对于 .c和.cpp文件,g++则统一当做cpp文件编译
使用g编译文件时,g会自动链接标准库STL,而gcc不会自动链接STL
gcc在编译C文件时,可使用的预定义宏是比较少的
gcc在编译cpp文件时/g在编译c文件和cpp文件时(这时候gcc和g调用的都是cpp文件的编译器),会加入一些额外的宏。
6.在用gcc编译c文件时,为了能够使用STL,需要加参数 –lstdc ,但这并不代表 gcc –lstdc++ 和 g++等价,它们的区别不仅仅是这个。
cmake g++ gcc
cmake 是一个跨平台的安装(编译)工具,他允许开发者编写一种平台无关的CMakelists.txt文件来定制整个编译流程,然后在根据目标用户的平台进一步生成所需要的本地化makefile和工程文件,如unix的makefile或者windows的visual studio工程。
cmake 和make的区别
当只有一个源文件时,可以直接使用gcc来编译,当你的程序存在多个源程序时,用gcc逐个去编译他就会很麻烦,所以出现了make工具,make工具可以看成是一个智能的批处理工具,它本身没有编译和链接功能,而是用类似于批处理的功能,通过cmake生成的makefile文件来来指定用户的命令来进行编译和链接的。
makefile像乐谱,make像演奏家。但是当项目非常大时,手写makefile文件也很麻烦,这时候就出现了cmake工具,cmake工具可以更加简单的生成makefile文件,供make用。当然cmake还有其他功能,可以跨平台生成对应平台能用的makefile,而不用自己取修改makefile。
cmake可以生成makefile但是,cmake是根据CMakeLists.txt文件来生成makefile文件的。最后CmakeLists.txt是由谁生成的呢,答案是你自己手写的。
总结cmake和make的区别:
gcc
gcc可以对文件进行编译但是文件多了就变得不方便,所以有make和cmake。
make
make是根据makefile生成可执行文件,执行编译和链接的功能,注意其本身更没有编译和链接功能,但是却可以根据makefile文件来编译和链接;
- cmake
cmake是根据CMakeLists.txt来生成makefile文件的。
例如:
存在一个源文件:
1 | hello.c |
需要生成可执行文件:
1 | hello |
需要执行:
1 | gcc hello.c -o hello |
如果将上面的命令写在一个文件中,这个文件就是makefile文件,执行make就会执行makefile中的所有命令。
cmake是用来生成makefile文件的,生成makefile文件的工具还有autotools和qmake。
基础语法
- 1.1
https://www.hahack.com/codes/cmake/
1.2 cmake_minimum_required(VERSION 2.6)
1.3 project(build_observe)
project 不是强制性的,但是建议都加上
- 1.4 CMakeLists中add_executable(可执行文件, src1,src2,src3…)
在add_executable语句中,src为构成可执行文件的所有源文件列表,需要将构成可执行文件的所有源文件都添加进去。
- 1.5 find_package()
1 | find_package(<PackageName> [version] [EXACT] [QUIET] [MODULE] |
REQUIRED: 加上后如果没有发现package时,将会停止并且会弹出一个错误。
例如opencv的例子(packageName=OpenCV)
1 | find_package(OpenCV REQUIRED core highgui imgproc imgcodecs) |