① 第1篇(共2篇):cmake詳細使用教程
原地址鏈接: cmake使用詳細教程(日常使用這一篇就足夠了)_李吱恩的博客-CSDN博客
原地址是一篇特別好的文章,此處只是轉載,供大家學習,本人沒有版權,如涉及版權會立刻刪除
一、cmake安裝
1、在官網下載cmake的安裝包,這里我下載的是v3.26
github.com/Kitware/CMak...
2、找到下載的sh文件,並使用bash來執行sh腳本
bash cmake-3.26.0-rc4-linux-x86_64.sh
3、然後把cmake/bin/cmake軟鏈接到/bin目錄下
ln -s /root/download/cmake-3.26.0-rc4-linux-x86_64/bin/cmake /bin/cmake
4、此時已經安裝完成,可以在shell中使用cmake命令
二、使用cmake來配合程序的編譯
1、只有一個源文件的程序編譯
首先在當前目錄下創建兩個文件
hello.cpp
CMakeLists.txt (注意CMakeLists大小寫,不要寫錯了)
第一行意思是cmake最低版本要求2.8,
第二行是本項目的工程名
第三行:第一個變數:要生成的可執行文件名為hello,後面的參數是需要的依賴。
接著在當前目錄下執行 cmake .
接著會發現目錄下多生成了一些文件,例如Makefile
然後使用GUN make來編譯程序
此時會發現已生成可執行程序,並可以正常執行
2、同一目錄下多個源文件
此時在當前目錄新增兩個依賴,並mian函數的執行需要依賴這兩個文件
add.cpp
add.h
只需要CMakeLists.txt中添加所依賴的.cpp文件,編譯步驟和上面相同
三、同一目錄下很多源文件
如果同一目錄下有無窮多源文件,那麼一個一個添加就很慢了。此時可以使用cmake中的函數存儲這些源文件
aux_source_directory(dir var)
他的作用是把dir目錄中的所有源文件都儲存在var變數中
然後需要用到源文件的地方用 變數var來取代
此時 CMakeLists.txt 可以這樣優化
注意:變數的使用和Makefile不同,CMake是利用大括弧,如 ${index}
四、頭文件在別的文件夾
對於集中的頭文件,CMake提供了一個很方便的函數
include_directories ( dir )
他的作用是 自動去dir目錄下尋找頭文件,相當於 gcc中的 gcc -I dir
此時 CMakeLists.txt 可以這樣優化
五、頭文件源文件分離,並含有多個文件夾
假如說當前的工程目錄是這樣的,頭文件和源文件分離,並含有多個文件夾
根據上面的《三》和《四》。此時 CMakeLists.txt 可以這樣優化
六、生成動態庫和靜態庫
假如說當前的項目目錄是這樣的
inc目錄下存放頭文件
src目錄下存放源文件
lib目錄下存放生成的庫
build目錄下存放構建項目相關的文件,如CMakeLists.txt。而稍後我們也在這個目錄下執行cmake和make
此時 CMakeLists.txt 可以這樣優化
解釋一下:
PROJECT_BINARY_DIR是cmake系統變數,意思是執行cmake命令的目錄,我們計劃在build目錄下執行cmake命令,所以這個變數也就等同於build目錄
set_target_properties重新定義了庫的輸出名稱,如果不使用set_target_properties也可以,那麼庫的名稱就是add_library里定義的名稱。具體可以參考官方文檔。
LIBRARY_OUTPUT_PATH 是cmake系統變數,項目生成的庫文件都放在這個目錄下。這里我指定庫生成到lib目錄。
開始編譯:
在build目錄下執行 cmake .
在build目錄下執行 make
查看lib目錄下是否生成庫文件,
出現庫文件就算編譯成功
七、鏈接庫文件
我們已經在lib目錄下生成了庫文件,下面我們寫一個main函數來使用庫文件
目錄結構如下:
lib目錄下存放靜態庫和動態庫
main_src目錄下存放main函數相關的源文件
bin目錄存放項目生成的可執行文件
此時 CMakeLists.txt 可以這樣寫
解釋一下:
EXECUTABLE_OUTPUT_PATH是cmake系統變數,意思是生成的可執行文件的的目錄,我這里把他改為bin目錄,因此生成的可執行性文件會出現在bin目錄中。
八、CMake其他功能
一、添加編譯選項
有時編譯程序時想添加一些編譯選項,如-Wall,-std=c++11等,可以使用add_compile_options來進行操作,例如:
原文件是一篇特別容易懂且全面的文檔
原文鏈接: cmake使用詳細教程(日常使用這一篇就足夠了)_李吱恩的博客-CSDN博客
② CC和gcc是一樣的編譯器嗎
cc是Unix系統的C Compiler,而gcc則是GNU Compiler Collection,GNU編譯器套裝。gcc原名為Gun C語言編譯器,因為它原本只能處理C語言,但gcc很快地擴展,包含很多編譯器(C、C++、Objective-C、Ada、Fortran、Java)。因此,它們是不一樣的,一個是古老的C編譯器,一個是GNU編譯器集合,gcc裡面的C編譯器比cc強大多了,因此沒必要用cc。
下載不到cc的原因在於:cc來自於昂貴的Unix系統,cc是商業軟體。
Linux下的cc是gcc符號連接,可以通過$ls –l /usr/bin/cc來簡單察看,該變數是make程序的內建變數,默認指向gcc。cc符號鏈接和變數存在的意義在於源碼的移植性,可以方便的用gcc來編譯老的用cc編譯的Unix軟體,甚至連makefile都不用改在,而且也便於Linux程序在Unix下編譯。
③ linux查看centos版本命令
你好,查看CentOS版本信息的命令有以下幾種:
cat /etc/issue 查看版本
[root@Nginx ~]# cat /etc/issue
CentOS release 6.5 (Final)
Kernel
on an m
CentOS release 6.5 (Final)
CentOS 發行版6.5
cat /etc/redhat-release
[root@Nginx ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
cat /proc/version
[root@Nginx ~]# cat /proc/version
Linux version 2.6.32-431.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Fri Nov 22 03:15:09 UTC 2013
我們可以看到該系統使用的是Linux 2.6.32 內核的64為操作系統。GCC 為GUN 編譯器集合,採用4.4.7版本。
uname -a
[root@Nginx ~]# uname -a
Linux Nginx 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
Linux 主機Nginx
Linux 版本2.6.32-431.el6.x86_64 64位
uname -r
[root@Nginx ~]# uname -r
2.6.32-431.el6.x86_64
分析結果:Linux 版本2.6.32-431.el6.x86_64 64位
希望可以幫到你,謝謝
④ makefile 中的,像gun中的 awk,grep都什麼意思,誰有文檔說明,給你,謝謝!
你這個makefile 文件因該是在linux下使用的編譯文件。awk,grep都是linux的過濾命令。
grep主要是命令的簡單過濾。
awk是一個強大的文本分析工具,相對於grep的查找,sed的編輯,awk在其對數據分析並生成報告時,顯得尤為強大。簡單來說awk就是把文件逐行的讀入,以空格為默認分隔符將每行切片,切開的部分再進行各種分析處理。
從這里可以看出,awk和grep都是文本處理,但awk更加強大。