1.gcc是GNU Compiler Collection(就是GNU編譯器套件),也能夠簡單認爲是編譯器,它能夠編譯不少種編程語言(括C、C++、Objective-C、Fortran、Java等等)。
2.當你的程序只有一個源文件時,直接就能夠用gcc命令編譯它。
3.可是當你的程序包含不少個源文件時,用gcc命令逐個去編譯時,你就很容易混亂並且工做量大
4.因此出現了make工具
make工具能夠當作是一個智能的批處理工具,它自己並無編譯和連接的功能,而是用相似於批處理的方式—經過調用makefile文件中用戶指定的命令來進行編譯和連接的。
5.makefile是什麼?簡單的說就像一首歌的曲譜,make工具就像指揮家,指揮家根據曲譜指揮整個樂團怎麼樣演奏,make工具就根據makefile中的命令進行編譯和連接的。
6.makefile命令中就包含了調用gcc(也能夠是別的編譯器)去編譯某個源文件的命令。
7.makefile在一些簡單的工程徹底能夠人工手下,可是當工程很是大的時候,手寫makefile也是很是麻煩的,若是換了個平臺makefile又要從新修改。
8.這時候就出現了Cmake這個工具,cmake就能夠更加簡單的生成makefile文件給上面那個make用。固然cmake還有其餘功能,就是能夠跨平臺生成對應平臺能用的makefile,你不用再本身去修改了。
9.但是cmake根據什麼生成makefile呢?它又要根據一個叫CMakeLists.txt文件(學名:組態檔)去生成makefile。
10.到最後CMakeLists.txt文件誰寫啊?親,是你本身手寫的。
11.固然若是你用IDE,相似VS這些通常它都能幫你弄好了,你只須要按一下那個三角形
12.接着是qmake,qmake是什麼,先說一下Qt這個東西。Qt是跨平臺C++圖形用戶界面應用程序開發框架。它既能夠開發GUI程序,也可用於開發非GUI程序,好比控制檯工具和服務器。簡單的說就是C++的第三方庫,使用這個庫你能夠很容易生成windows,Linux,MAC os等等平臺的圖形界面。如今的Qt還包含了開發各類軟件通常須要用到的功能模塊(網絡,數據庫,XML,多線程啊等等),比你直接用C++(只帶標準內褲那種)要方便和簡單。
13.你能夠用Qt簡簡單單就實現很是複雜的功能,是由於Qt對C++進行了擴展,你寫一行代碼,Qt在背後幫你寫了幾百上千行,而這些多出來的代碼就是靠Qt專有的moc編譯器(The Meta-Object Compiler)和uic編譯器(User Interface Complier)來從新翻譯你那一行代碼。問題來了,你在進行程序編譯前就必須先調用moc和uic對Qt源文件進行預處理,而後再調用編譯器進行編譯。上面說的那種普通makefile文件是不適用的,它沒辦法對qt源文件進行預處理。因此qmake就產生了。
14.qmake工具就是Qt公司製造出來,用來生成Qt 專用makefile文件,這種makefile文件就能自動智能調用moc和uic對源程序進行預處理和編譯。qmake固然必須也是跨平臺的,跟cmake同樣能對應各類平臺生成對應makefile文件。
15.qmake是根據Qt 工程文件(.pro)來生成對應的makefile的。工程文件(.pro)相對來講比較簡單,通常工程你均可以本身手寫,可是通常都是由Qt的開發環境 Qt Creator自動生成的,你仍是隻須要按下那個邪惡三角形就完事了。
16.尚未完,因爲qmake很簡單很好用又支持跨平臺,並且是能夠獨立於它的IDE,因此你也能夠用在非Qt工程上面,照樣能夠生成普通的makefile,只要在pro文件中加入CONFIG -= qt 就能夠了。
17. 這樣qmake和cmake有什麼區別?
很差意思,cmake也是一樣支持Qt程序的,cmake也能生成針對qt 程序的那種特殊makefile,
只是cmake的CMakeLists.txt 寫起來相對與qmake的pro文件複雜點。
qmake 是爲 Qt 量身打造的,使用起來很是方便,可是cmake功能比qmake強大。
通常的Qt工程你就直接使用qmake就能夠了,cmake的強大功能通常人是用不到的。
當你的工程很是大的時候,又有qt部分的子工程,又有其餘語言的部分子工程,聽說用cmake會 方便,我也沒試過。
-------------------------------------------------------------
ROS編譯:catkin簡析 ---------------------------------------------
1. catkin_make 與cmake的關係
程序在cmake編譯是這樣的流程, cmake指令依據你的CMakeLists.txt 文件,生成makefiles文件,make再依據此makefiles文件編譯連接生成可執行文件.服務器
catkin_make是將cmake與make的編譯方式作了一個封裝的指令工具, 規範了工做路徑與生成文件路徑.網絡
1) cmake標準流程
- # 在一個CMake項目裏
- $ mkdir build
- $ cd build
- $ cmake ..
- $ make
- $ make install # (可選)
2) catkin_make 的流程
- # In a catkin workspace
- $ catkin_make
- $ catkin_make install # (可選)
-
-
- 若是源碼不在默認工做空間,須要指定編譯路徑:
-
- # In a catkin workspace
- $ catkin_make --source my_src
- $ catkin_make install --source my_src # (optionally)