CMake的hello world(一)使用CMake
本系列都是學習<CMake實踐>這本書,書下載連結
https://download.csdn.net/download/hjxu2016/10741464
建立一個 t1 資料夾
mkdir t1
cd t1
在 t1 目錄建立 main.cpp 和 CMakeLists.txt(注意檔名大小寫):
main.cpp 檔案內容:
//main.cpp
#include<iostream> using namespace std; int main() { cout<<"Hello World from t1 Main"<<endl; return 0; }
CmakeLists.txt 檔案內容:
PROJECT (HELLO) # PREJECT指令用法 # PROJECT(projectname [CXX] [C] [JAVA]) # 可以用這個指令定義工程的名稱,並指定工程支援的語言,語言列表是可以忽略的,預設情況表示支援所有語言 # 這個指令還隱式定義了兩個cmake變數 projectname_BINARY_DIR 和 projectname_SOURCE_DIR,因為採用的是內部編 # 譯,兩個變數目前指的是工作所在路徑,如果是外部編譯,兩者所指代的內容會有所不同,但是如果改變工程名, # 那麼這兩個變數也需要修改,那會很麻煩,所有,建議直接使用PROJECT_BINARY_DIR 和 PROJECT_SOURCE_DIR # 外部編譯時,PROJECT_BINATY_DIR指的是編譯路徑, PROJECT_SOURCE_DIR指工程路徑 SET(SRC_LIST main.cpp) #目前暫時先了解SET指令用來顯式定義變數 MESSAGE(STATUS "This is Binary dir" ${HELLO_BINARY_DIR}) MESSAGE(STATUS "This is SOURCE dir" ${HELLO_SOURCE_DIR}) # MESSAGE用法 # MESSAGR([SEND_ERROR | STATUS | FATAL_ERROR] "message to display") # SEND_ERROR : 產生錯誤,生成過程被跳過 # STATUS: 輸出字首為-的資訊 # FATAL_ERROR: 立即終止所有cmake過程 ADD_EXECUTABLE(hello ${SRC_LIST}) # 這個可以生產hello的可執行檔案,相關的原始檔是SRC_LIST中定義的原始檔列表 # ${}用來引用變數, # 需要注意,指令大小寫無關,引數和變數大小寫相關,但是推薦使用大寫指令 # ADD_EXECUTABLE 可以忽略source列表中的檔案字尾,camke會在本目錄自動查詢,但是不推薦,萬一存在main.
2,開始構建
所有的檔案建立完成後,t1 目錄中應該存在 main.cpp 和 CMakeLists.txt 兩個檔案
接下來我們來構建這個工程,在這個目錄執行:
cmake . (注意命令後面的點號,代表本目錄)。
輸出大概是這個樣子:
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Check size of void*
-- Check size of void* - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- This is BINARY dir /backup/cmake/t1
-- This is SOURCE dir /backup/cmake/t1
-- Configuring done
-- Generating done
-- Build files have been written to: /backup/cmake/t1
再讓我們看一下目錄中的內容:
你會發現,系統自動生成了:
CMakeFiles, CMakeCache.txt, cmake_install.cmake 等檔案,並且生成了
Makefile.
現在不需要理會這些檔案的作用,以後你也可以不去理會。最關鍵的是,它自動生成了
Makefile.
然後進行工程的實際構建,在這個目錄輸入 make 命令,大概會得到如下的彩色輸出:
Scanning dependencies of target hello
[100%] Building C object CMakeFiles/hello.dir/main.o
Linking C executable hello
[100%] Built target hello
如果你需要看到 make 構建的詳細過程,可以使用 make VERBOSE=1 或者 VERBOSE=1
make 命令來進行構建。
這時候,我們需要的目標檔案 hello 已經構建完成,位於當前目錄,嘗試執行一下:
./hello
得到輸出:
Hello World from Main