CMake的簡單應用
各種不同的Make 工具遵循著不同的規范和標準,所執行的 Makefile 格式也千差萬別。如果軟件想跨平臺,必須要保證能夠在不同平臺編譯,這就得為每一個Make工具寫一次 Makefile ,這將是一件讓人抓狂的工作。使用CMake工具就可以很好的解決這個問題。
CMake是一個比make更高級的編譯配置工具,它可以根據不同平臺、不同的編譯器,生成相應的Makefile。通過編寫CMakeLists.txt,可以控制生成的Makefile,從而控制編譯過程。CMake自動生成的Makefile不僅可以通過make命令構建項目,生成目標文件,還支持安裝(make install)、測試安裝的程序是否能正確執行(make test,或者ctest)、生成當前平臺的安裝包(make package)、生成源碼包(make package_source)、產生Dashboard顯示數據並上傳等高級功能,隻要在CMakeLists.txt中簡單配置,就可以完成很多復雜的功能,包括寫測試用例。如果有嵌套目錄,子目錄下可以有自己的CMakeLists.txt。
在 linux 平臺下使用 CMake 生成 Makefile 並編譯的流程如下:
1. 編寫 CMake 配置文件 CMakeLists.txt 。
2. 執行命令 cmake PATH 或者 ccmake PATH 生成 Makefile。其中, PATH 是 CMakeLists.txt 所在的目錄。
3. 使用 make 命令進行編譯。
語法
CMake基本語法由命令、註釋和空格組成,其中命令是不區分大小寫的。符號 # 後面的內容被認為是註釋。命令由命令名稱、小括號和參數組成,參數之間使用空格進行間隔。變量引用使用 ${VAR} 形式。
command (args …) #comment
常用命令:
cmake_minimum_required (VERSION 2.8) # CMake 最低版本號要求
project (Demo) # 指定項目的名稱
set(SRCS main.cpp …) # 設置變量
include_directories(/usr/include/jsoncpp) # 添加頭文件目錄,比如使用的一些lib庫
aux_source_directory(. DIR_SRCS) # 查找當前目錄下的所有源文件,並將名稱保存到 DIR_SRCS 變量
add_subdirectory(math) # 添加 math 子目錄
add_executable(Demo main.cc …) # 指定生成目標,第一個參數為目標文件名
add_library(MathFunctions ${DIR_LIB_SRCS}) # 添加一個庫文件
target_link_libraries(Demo MathFunctions) # 添加鏈接庫
獲取更多CMake信息:
cmake –help
cmake –help-command-list
cmake –help-variable-list
示例代碼
示例代碼1:
cmake_minimum_required(VERSION 2.8) # CMake 最低版本號要求 set(CMAKE_CXX_FLAGS "-std=c++0x") # 設置編譯參數 include_directories(/usr/include/jsoncpp) # 添加頭文件目錄 set(SRCS # 設置變量SRCS,將所有源文件添加到變量SRCS SamsungRequestResolver.cpp SamsungResolverContainer.cpp SamsungResponseResolver.cpp BanCat.cpp main.cpp ) add_executable(framework ${SRCS}) # 指定生成目標 target_link_libraries(framework jsoncpp hiredis boost_system) # 添加鏈接庫
示例代碼2:(來源於參考引用1)
代碼目錄如下所示,./Demo3目錄下有一個main.cc文件和一個math目錄。對於這種嵌套目錄的情況,需要在目錄 ./Demo3 和 ./Demo3/math 下各創建一個CMakeLists.txt。
./Demo3 | +--- main.cc | +--- math/ | +--- MathFunctions.cc | +--- MathFunctions.h
父目錄中的 CMakeLists.txt :
# CMake 最低版本號要求 cmake_minimum_required (VERSION 2.8) # 項目信息 project (Demo3) # 查找當前目錄下的所有源文件 # 並將名稱保存到 DIR_SRCS 變量 aux_source_directory(. DIR_SRCS) # 添加 math 子目錄,math目錄下的CMakeLists.txt文件和源代碼會被處理 add_subdirectory(math) # 指定生成目標Demo add_executable(Demo main.cc) # 添加鏈接庫 target_link_libraries(Demo MathFunctions)
子目錄中的 CMakeLists.txt:
# 查找當前目錄下的所有源文件 # 並將名稱保存到 DIR_LIB_SRCS 變量 aux_source_directory(. DIR_LIB_SRCS) # 生成鏈接庫 add_library(MathFunctions ${DIR_LIB_SRCS})
編譯
在編譯之前,首先要將CMakeLists.txt文件放在代碼目錄中。為瞭方便管理生成的makefile文件、目標文件等文件,最好創建一個build目錄專門用來存放這些文件。在代碼目錄,依次執行以下命令:
mkdir build cd build cmake .. make
參考引用:
1. http://www.hahack.com/codes/cmake/
2. https://www.cnblogs.com/qixianyu/p/6574048.html
到此這篇關於CMake的簡單應用的文章就介紹到這瞭,更多相關CMake入門內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- windows下vscode使用cmake的方法
- 如何用C寫一個web服務器之GCC項目編譯
- vscode和cmake編譯多個C++文件的實現方法
- Qt6.3 + Clion +MSVC2019環境配置詳解
- Clion(CMake工具)中引入第三方庫的詳細方法