1. 为何须要Makefile而后经过make来构建可执行程序?程序员
make是一个工具,它控制可执行程序和程序源文件中非源码文件的生成,而Makefile就是制定了一系列规则,告诉make如何构建该程序。须要make的缘由是当一个project有不少源文件和头文件的时候,程序员编写好Makefile,用户就不须要知道这些文件之间的依赖关系,既能够用一个简单的命令“make”将可执行文件构建完成。windows
另外,使用make的另外一个好处是,当咱们只改变了project中某一个或者某几个源文件时,从新编译整个程序效率很低,可是用make进行编译,它仅仅会更新那些直接或者间接依赖这些改变的源码文件的非源码文件。工具
2. 有人make为何还要cmakeui
对于大工程,写makefile很是麻烦,因此就设计cmake读入全部源文件,自动生成makefile, 这就是cmake工具,相应的,就要编写CMakeLists.txt文件,这个文件比makefile易读性更强,也更容易编写。编写完毕后,执行cmake就会产生Makefile, 而后make生成可执行文件。spa
并且Makefile是在类unix环境下的项目管理工具,对windows下不太友好,cmake是跨平台项目管理工具。设计
3. 给出个例子编译opencv代码unix
g++ `pkg-config opencv --cflags` opencv.cpp -o opencv `pkg-config opencv --libs`
./opencvcode
CMakeLists.txtblog
cmake_minimum_required(VERSION 2.8) project(opencv) find_package(OpenCV REQUIRED) add_executable(opencv opencv.cpp) target_link_libraries(opencv ${OpenCV_LIBS})
cmake .项目管理
make
./opencv
具体的编写规则见下参考连接
http://liqiang311.com/cpp/make%E4%B8%8Ecmake%E5%AD%A6%E4%B9%A0/