初识makefile,make,cmake

什么是makefile

make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎么样的去编译链接程序。
makefile关系到了整个工程的编译规则。makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。只要我们的Makefile写得够好,所有的这一切,我们只用一个make命令就可以完成,make命令会自动智能地根据当前的文件修改的情况来确定哪些文件需要重编译,从而自己编译所需要的文件和链接目标程序。

什么是make

makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法(包括链接)。

关于程序的编译和链接

在大多数时候,由于源文件太多,编译生成的中间目标文件太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以,我们要给中间目标文件打个包,在Windows下这种包叫“库文件”(Library File),也就是 .lib 文件,在UNIX下,是Archive File,也就是 .a 文件。Linux中的.so。
一个lib文件是obj文件的集合。
源文件首先会生成中间目标文件,再由中间目标文件生成执行文件。在编译时,编译器只检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成Object File。而在链接程序时,链接器会在所有的Object File中找寻函数的实现,如果找不到,那到就会报链接错误码

文件路径

usr文件夹称为是Unix System Resource,即Unix系统资源的缩写。

bin文件夹是一个二进制程序文件夹
1.bin是binary的缩写,代表的意思是二进制,二进制数据是用0和1两个数码来表示的数。
2.bin这个文件夹里存放的是二进制可执行的文件,比如exe,msi,com等的都是二进制文件,双击就能运行。

GUN下面绝大部分应用的编译系统都是用automake
于是乎,你看到的很多很多应用都安装在了/usr/local/目录下
然后通常/usr/bin下面的都是系统预装的可执行程序,会随着系统升级而改变
/usr/local/bin目录是给用户放置自己的可执行程序的地方,推荐放在这里,不会被系统升级而覆盖同名文件
安装好的lib文件存放在“/usr/local/lib”文件夹,h文件存放在“/usr/local/include”(Unix)

什么是cmake

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CMakeLists.txt。
cmake是跨平台项目管理工具,它用更抽象的语法来组织项目。在windows下它会支持生成visual studio的工程,在linux下它会生成Makefile,甚至它还能生成eclipse工程文件。也就是说,从同一个抽象规则出发,它为各个编译器定制工程文件。

dll

dll存在于windows中

openCV安装过程

mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D 换行CMAKE_INSTALL_PREFIX=usr/local/opencv3.1.0 -G “Unix Makefiles” ..
make
sudo make install