1. 程式人生 > >CMake的hello world(一)使用CMake

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