命令行命令
當我們在命令行手動通過指令運行程序時,以g++命令為例,實際上細分為以下步驟
1.預處理,用g++ -E xxx.cpp > program.i表示,進行對宏,注釋等的處理,生成.i文件
2.編譯, 用g++ -S program.i表示,生成.s文件,把文件轉換為匯編文件
3.匯編, g++ -c program.s,把匯編文件變成.o文件
4.鏈接, g++ -O program.out program1.o program2.o … 把.o文件和庫文件鏈接起來形成一個對象文件
5.運行,使用"./program.out"即可, 需要注意的是如果在程序main函數中輸出argc,即命令行參數個數,"./program.out"也算一個參數,即"./program.out s1 s2"這行命令有3個命令行參數
鏈接庫
靜態鏈接庫.a/.lib,在鏈接時會將所有的靜態鏈接庫打包成.o文件,與寫好的程序鏈接在一起。不同的程序即使使用相同的靜態鏈接庫也必須多次打包,占用空間
動態鏈接庫.so/.dll,在程序運行時才把動態鏈接庫鏈接上去,不同的程序若使用相同的動態鏈接庫,只需要內存中有一份動態鏈接庫即可
make
make是幫助我們組織Project的工具,我們通過寫makefile文件來告知make怎么工作,makefile本質上只是把我們的"g++ ..."命令提前寫好,方便調用,最后我們再自己執行二進制文件。簡單的語法如下。
解釋如下
1.makefile中的每個target都代表了一個文件。
2.運行make默認執行makefile中第一個target。
3.執行一個target時,會做兩件事情:
3.1.查看與這個target同名的文件是否存在,如果不存在,那么就運行這個target下面的命令。
3.2.如果與這個target同名的文件已經存在,那么就檢查與這個target名的文件是否需要更新(即target文件的修改時間是否早於依賴文件的修改時間),如果需要更新,那么就運行這個target下面的命令。若均不滿足,則不需要執行命令
CMake
makefile在不同平台寫法不同,而且語法復雜。於是就有了CMake,CMake可以通過一些語法規則,幫助我們生成makefile,我們再自己調用makefile。我們通過寫CMakeLists.txt來告知CMake怎么工作, CMake有跨平台、語法簡單的優勢,而且非常流行,OpenCV便是用CMake來組織的。簡單語法如下。