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/