跨平臺編譯工具cmake的簡單使用
在使用不同平臺的電腦時,使用的編譯也會不一樣,如果想把一個項目在不同平臺下編譯,那有什么方式可以實現這樣的需求呢,這就是這篇文章就來介紹其中的一種方式,就是使用cmake,cmake 并不直接建構出最終的軟件,而是產生標準的建構檔,然后再借助編譯工具來構建。
| 環境搭建
在windows可以使用cmake+vscode+mingw配合使用構建,還需要把mingw32-make.exe,復制一份,將其中一份重命名為make.exe,以實現在不同平臺下可以直接使用make指令。在ubuntu中可以使用cmake+vscode+gcc來構建,ubuntu一般會自帶gcc。vscode需要安裝幾個相關插件:
(資料圖片僅供參考)
C/C++CMakeCMakeTools
可以通過cmake --version 來查看是否安裝成功,相關的安裝直接百度以下就可以;注意不同平臺下使用的命令可能會有差別,筆者使用的是ubuntu系統來操作。
| 簡單使用
同目錄單文件
1、先看文件樹
main.c源碼文件
#include"stdio.h"intmain(){printf("ok");return0;}
CMakeLists.txt配置文件
#CMake最低版本號要求cmake_minimum_required(VERSION2.8)#項目信息project(Demo1)#指定生成目標add_executable(Demomain.c)
2、構建Makefile文件
創建好文件夾后,再進入build文件夾, 使用 cmake .. 命令構建Makefile文件:
3、通過gcc編譯
在Makefile同級目錄下使用 make 命令編譯,就會生成一個可執行文件Demo文件:
4、執行可執行文件
同目錄多文件
1、編寫文件
在上邊的基礎上,把生成的文件刪除,再添加兩個文件:
main.c源碼文件
#include"stdio.h"#include"hello.h"intmain(){printf("ok");hello();return0;}
hello.c源碼文件
#include"hello.h"voidhello(void){printf("hello");}
hello.h源碼文件
#ifndef__HELLO__#define__HELLO__#include"stdio.h"voidhello(void);#endif
CMakeLists.txt配置文件(使用方式二):
方式一:通過手動指定源碼文件
#CMake最低版本號要求cmake_minimum_required(VERSION2.8)#項目信息project(Demo1)#指定生成目標add_executable(Demomain.chello.c)
方式二:查找當前目錄下的所有源文件
#CMake最低版本號要求cmake_minimum_required(VERSION2.8)#項目信息project(Demo1)#查找當前目錄下的所有源文件#并將名稱保存到DIR_SRCS變量aux_source_directory(.DIR_SRCS)#指定生成目標(自動查找)add_executable(Demo${DIR_SRCS})
2、構建Makefile文件
3、生成可執行文件
不同目錄多文件
不同目錄下的處理,就是把文件編譯成庫,再在對應位置鏈接進去。
1、先看文件樹
main.c 和 hello.c 和hello.h都可同目錄多文件案例源碼一樣。
頂層的CMakeLists.txt配置:
#CMake最低版本號要求cmake_minimum_required(VERSION2.8)#項目信息project(Demo3)#查找當前目錄下的所有源文件#并將名稱保存到DIR_SRCS變量aux_source_directory(.DIR_SRCS)#添加hello子目錄add_subdirectory(hello)#指定生成目標add_executable(Demomain.c)#添加鏈接庫target_link_libraries(DemoHelloFunctions)
hello文件夾中的CMakeLists.txt配置:
#查找當前目錄下的所有源文件#并將名稱保存到DIR_LIB_SRCS變量aux_source_directory(.DIR_LIB_SRCS)#生成鏈接庫add_library(HelloFunctions${DIR_LIB_SRCS})
2、構建Makefile文件
3、生成可執行文件
文件的路徑一定要是寫對,不然編譯會出問題:
正確的寫法如下:
執行可執行文件:
這就是cmake的簡單用法,可以根據自己需求進行深入學習。
審核編輯:湯梓紅
標簽:
頭條精選
- 跨平臺編譯工具cmake的簡單使用2023-08-14
- 雨水浸泡過的物品,如何消毒處置?2023-08-14
- 閉環監管嚴防“跑冒滴漏” 懷化確保惠農補2023-08-14
- 14個設區市都有精彩好戲2023-08-14
- 金達威:公司體重管理輔助產品可以查詢旗艦2023-08-14
- 芒果超媒:公司購買的理財產品均為保本產品2023-08-14
- 合力泰:部分銀行賬戶被凍結 2023-08-14
- 快捷酒店價格,為何直追星級酒店?2023-08-14
- 合肥一煙酒店短時間兩次違法 1瓶假酒罰款32023-08-14
- 十二星座中:誰是最受歡迎的星座?2023-08-14
- 港股一線丨港股疲弱,內房股汽車股集體走低2023-08-14
- 國家藥監局推動適老化改革試點 保障用藥安2023-08-14
- 冰原海霧中,他們閃耀著光——近距離感受中2023-08-14
- 石首“安薪”讓農民工“安心” 半年追討農2023-08-14
- 瑞信散戶投資者計劃對瑞銀收購案提起訴訟2023-08-14
- 理論薦讀|秦睿:“一切問題都要到現場去實2023-08-14
- 【中國經濟新亮點①】重大項目建設有力有序2023-08-14
- 寶可夢游戲因定期發布策略面臨質量問題挑戰2023-08-14
- 恩施州已兌現6177萬元“免申即享”補貼2023-08-14
- ox10042750(oxco150002)2023-08-14
- 武漢周邊兩日游適合去哪里(武漢周邊兩日游2023-08-14
- 蔣孔陽自選集:美的規律(關于蔣孔陽自選集2023-08-14
- 時事觀察|“緊急狀態”漸成厄瓜多爾“常態2023-08-14
- 日本芯片戰略逐步落實,影響全球芯片格局2023-08-13
- 奧飛娛樂:公司正在推進相關合作事項2023-08-13
- 《博德之門3》解鎖古代典籍的寶石獲取方式2023-08-13
- 勸學韓愈拼音版(勸學韓愈)2023-08-13
- 可怕!加熱3分鐘釋放幾十億塑料顆粒!千萬2023-08-13
- 恭喜B羅奪冠!國米醞釀交易得到16球6助攻前2023-08-13
- 廣州鼓勵在城中村規模化建設保障性租賃住房2023-08-13