1. cmake介紹html
1.1 cmake用途編程
CMake的用途是能經過一系列的源碼和相關的配置來生成須要的編譯器平臺上的項目文件。譬如,若是一個項目須要在Windows上用VS編譯,在Linux上用make編譯,在OS X上用XCODE,那麼按之前的作法是在整個項目文件裏看三個目錄,分別放置VS的sln文件,Linux的makefile,OS X的XCODE,而後讓不一樣需求的人到相應的目錄用本身須要的工程文件(這看起來沒有什麼很差彷佛)。有了CMake之後,就不須要這三個目錄了,只要有一個給CMake讀的文件,而後CMake的UI上會須要用戶選擇目標平臺,這樣CMake就會生成目標平臺上的工程文件。舉例,若是用戶選的是VS2005平臺,那麼CMake就會在源代碼目錄下生成供VS2005使用的sln文件;若是是make,就會生成makefile等等。windows
1.2 cmakelist 和 makefile編程語言
- gcc是GNU Compiler Collection(就是GNU編譯器套件),也能夠簡單認爲是編譯器,它能夠編譯不少種編程語言(括C、C++、Objective-C、Fortran、Java等等)。
- 當你的程序只有一個源文件時,直接就能夠用gcc命令編譯它。
- 可是當你的程序包含不少個源文件時,用gcc命令逐個去編譯時,你就很容易混亂並且工做量大
- 因此出現了make工具, make工具能夠當作是一個智能的批處理工具,它自己並無編譯和連接的功能,而是用相似於批處理的方式—經過調用makefile文件中用戶指定的命令來進行編譯和連接的。
- makefile是什麼?簡單的說就像一首歌的曲譜,make工具就像指揮家,指揮家根據曲譜指揮整個樂團怎麼樣演奏,make工具就根據makefile中的命令進行編譯和連接的。
- makefile命令中就包含了調用gcc(也能夠是別的編譯器)去編譯某個源文件的命令。
- makefile在一些簡單的工程徹底能夠人工手下,可是當工程很是大的時候,手寫makefile也是很是麻煩的,若是換了個平臺makefile又要從新修改。
- 這時候就出現了Cmake這個工具,cmake就能夠更加簡單的生成makefile文件給上面那個make用。固然cmake還有其餘功能,就是能夠跨平臺生成對應平臺能用的makefile,你不用再本身去修改了。
- 但是cmake根據什麼生成makefile呢?它又要根據一個叫CMakeLists.txt文件(學名:組態檔)去生成makefile。
- 到最後CMakeLists.txt文件誰寫啊?親,是你本身手寫的。
- 然若是你用IDE,相似VS這些通常它都能幫你弄好了,你只須要按一下那個三角形
爲何使用makefile:對於一個大型軟件,其編譯、維護是一個複雜而耗時的過程。它涉及到大量的文件、目錄,這些文件多是在不一樣的時間、由不一樣的人、在不一樣的地方分別寫的,其中一些是程序,有些是數據,有些是文檔,有些是衍生文件。甚至參與開發的人員也不必定清楚全部文件的細節,包括如何處理它們。此外,構成軟件的文件數目可能達到成百上千,甚至成千上萬個,開發過程當中當修改了少許幾個文件後,每每只須要從新編譯、生成少數幾個文件。
有效地描述這些文件之
間的依賴關係以及處理命令,當個別文件改動後僅執行必要的處理,
而沒必要重複整個編譯過程,能夠大大提升軟件開發的效率。
Cmake是用來makefile的一個工具:
讀
入全部源文件以後,自動生成makefile。
2. Windows下利用CMake和VS2013編譯OpenCV
2.1 爲何要編譯?
爲了在調試時能夠跟蹤進入到源碼中,咱們須要從新編譯生成.dll和.lib文件,這樣替換掉opencv提供的.dll和.lib文件,就能夠解決這個問題。 工具
原本opencv提供的動態連接庫就已是能夠用的,可是在調試過程當中,有時候想要查看源碼,而那些卻被封裝好了,F11根本進不去,這樣就不得不翻根目錄下的.cpp文件來看了,但這樣作比較麻煩,內心老是不爽,天然而然就要想點偏方了。post
多數狀況下,可以直接使用OpenCV自帶的庫文件,但是假設是爲了方便調試:方便調試opencv源代碼或者爲了與某些庫兼容,仍是需要又一次編譯opencv的源代碼。測試
2.2 重編譯獲得了什麼?ui
新產生的動態連接庫(.dll和.lib)。url
2.3 編譯步驟
1)下載並安裝CMake;spa
2)用CMake工具生成OPENCV工程項目; (VS下爲.sln文件)
3)用VS2010代開工程項目,從新編譯獲得動態連接庫(.dll和.lib文件);
4)應用上述文件新建工程,並F11跟蹤調試代碼。
找到Cmake編譯後產生的 .sln 文件 ,用VS2010打開。在
Debug和
Release模式下,分別編譯一次(發現ALL_BUILD,右鍵並Bulid)。.
lib文件在D:\opencv_cmake\
lib的Debug和Relesae下,
.dll文件在D:\opencv_cmake\
bin的Debug和Relesae下。在新建測試項目以前,要將.dll所在的路徑添加到環境變量中(記得刪除原有opencv邊境變量路徑)。
2.4 編譯過程與方法參考:
參考於: