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