在使用不同平臺(tái)的電腦時(shí),使用的編譯也會(huì)不一樣,如果想把一個(gè)項(xiàng)目在不同平臺(tái)下編譯,那有什么方式可以實(shí)現(xiàn)這樣的需求呢,這就是這篇文章就來(lái)介紹其中的一種方式,就是使用cmake,cmake 并不直接建構(gòu)出最終的軟件,而是產(chǎn)生標(biāo)準(zhǔn)的建構(gòu)檔,然后再借助編譯工具來(lái)構(gòu)建。
| 環(huán)境搭建
在windows可以使用cmake+vscode+mingw配合使用構(gòu)建,還需要把mingw32-make.exe,復(fù)制一份,將其中一份重命名為make.exe,以實(shí)現(xiàn)在不同平臺(tái)下可以直接使用make指令。在ubuntu中可以使用cmake+vscode+gcc來(lái)構(gòu)建,ubuntu一般會(huì)自帶gcc。vscode需要安裝幾個(gè)相關(guān)插件:
?
C/C++ CMake CMake?Tools
?
可以通過(guò)?cmake --version 來(lái)查看是否安裝成功,相關(guān)的安裝直接百度以下就可以;注意不同平臺(tái)下使用的命令可能會(huì)有差別,筆者使用的是ubuntu系統(tǒng)來(lái)操作。
| 簡(jiǎn)單使用
同目錄單文件
1、先看文件樹
main.c源碼文件
?
#include?"stdio.h" int?main() { ????printf("ok "); ????return?0; }
?
CMakeLists.txt配置文件
?
#?CMake?最低版本號(hào)要求 cmake_minimum_required?(VERSION?2.8) #?項(xiàng)目信息 project?(Demo1) #?指定生成目標(biāo) add_executable(Demo?main.c)
?
2、構(gòu)建Makefile文件
創(chuàng)建好文件夾后,再進(jìn)入build文件夾, 使用 cmake .. 命令構(gòu)建Makefile文件:
3、通過(guò)gcc編譯
在Makefile同級(jí)目錄下使用 make 命令編譯,就會(huì)生成一個(gè)可執(zhí)行文件Demo文件:
4、執(zhí)行可執(zhí)行文件
同目錄多文件
1、編寫文件
在上邊的基礎(chǔ)上,把生成的文件刪除,再添加兩個(gè)文件:
main.c源碼文件
?
#include?"stdio.h" #include?"hello.h" int?main() { ????printf("ok "); ????hello(); ????return?0; }
?
hello.c源碼文件
?
#include?"hello.h" void?hello(void) { ????printf("hello "); }
?
hello.h源碼文件
?
#ifndef?__HELLO__ #define?__HELLO__ #include?"stdio.h" void?hello(void); #endif
?
CMakeLists.txt配置文件(使用方式二):
方式一:通過(guò)手動(dòng)指定源碼文件
?
#?CMake?最低版本號(hào)要求 cmake_minimum_required?(VERSION?2.8) #?項(xiàng)目信息 project?(Demo1) #?指定生成目標(biāo) add_executable(Demo?main.c?hello.c)
?
方式二:查找當(dāng)前目錄下的所有源文件
?
#?CMake?最低版本號(hào)要求 cmake_minimum_required?(VERSION?2.8) #?項(xiàng)目信息 project?(Demo1) #?查找當(dāng)前目錄下的所有源文件 #?并將名稱保存到?DIR_SRCS?變量 aux_source_directory(.?DIR_SRCS) #?指定生成目標(biāo)(自動(dòng)查找) add_executable(Demo?${DIR_SRCS})
?
2、構(gòu)建Makefile文件
3、生成可執(zhí)行文件
不同目錄多文件
不同目錄下的處理,就是把文件編譯成庫(kù),再在對(duì)應(yīng)位置鏈接進(jìn)去。
1、先看文件樹
main.c 和 hello.c 和hello.h都可同目錄多文件案例源碼一樣。
頂層的CMakeLists.txt配置:
?
#?CMake?最低版本號(hào)要求 cmake_minimum_required?(VERSION?2.8) #?項(xiàng)目信息 project?(Demo3) #?查找當(dāng)前目錄下的所有源文件 #?并將名稱保存到?DIR_SRCS?變量 aux_source_directory(.?DIR_SRCS) #?添加?hello?子目錄 add_subdirectory(hello) #?指定生成目標(biāo)? add_executable(Demo?main.c) #?添加鏈接庫(kù) target_link_libraries(Demo?HelloFunctions)
?
hello文件夾中的CMakeLists.txt配置:
?
#?查找當(dāng)前目錄下的所有源文件 #?并將名稱保存到?DIR_LIB_SRCS?變量 aux_source_directory(.?DIR_LIB_SRCS) #?生成鏈接庫(kù) add_library?(HelloFunctions?${DIR_LIB_SRCS})
?
2、構(gòu)建Makefile文件
3、生成可執(zhí)行文件
文件的路徑一定要是寫對(duì),不然編譯會(huì)出問(wèn)題:
正確的寫法如下:
執(zhí)行可執(zhí)行文件:
這就是cmake的簡(jiǎn)單用法,可以根據(jù)自己需求進(jìn)行深入學(xué)習(xí)。
審核編輯:湯梓紅
評(píng)論