cmake學習之道

cmke命令格式

cmake 選項 路徑
最主要的選項
-D 添加變量及值 使用案列 (cmake -D ARM_BUILD=1 . )表示在當前路徑執行Cmake命令並將ARM_BUILD的值傳到CMakeLists.txt裏去

創建:

在項目路徑中,新增CMakeLists.txt文件

語法:

在CMakeLists.txt中的命令的語法,都是形如下面這種格式:

command (args...)
command:是命令的名字。
args:是參數的列表。多個參數使用空格隔開。
cmake_minimum_required(VERSION 2.8.5) 
設置項目要求的CMake最低版本號,如果當前版本的CMake低於所需的值,它將停止處理項目並報告錯誤。注意在project之前調用該命令
project (HelloCMake) 
爲整個工程設置一個工程名
add_executable(HelloCMake hello_cmake.c) 
使用指定的源文件給項目編譯成一個可執行文件
add_library(HelloCMake STATIC hello_cmake.c)
使用指定的源文件給項目編譯成一個靜態庫文件
add_library(HelloCMake SHARED hello_cmake.c)
使用指定的源文件給項目編譯成一個動態庫文件
file(GLOB SRC_FILES "src/hello*") 
查找src目錄下所有以hello開頭的文件並保存到SRC_FILES變量裏(只會找src下的文件,對於src下的文件夾是不會去找的)
file( GLOB_RECURSE SRC_FILES "src/hello*") 
遞歸查找src目錄下所有以hello開頭的文件並保存到SRC_FILES變量裏(src下的所有的文件夾都會去找)
include(platform/CMakeLists.txt) 包含其他目錄的CMakeLists.txt文件
link_directories(${PROJECT_SOURCE_DIR}/lib) 
指定鏈接器查找庫的路徑(一定要在add_executable以前設置,不然無效)
message("This is BINARY dir " ${HELLO_BINARY_DIR}) 
向用戶顯示消息
set(COCOS2D_ROOT ${CMAKE_SOURCE_DIR}) 
將一個CMAKE_SOURCE_DIR變量的值傳給COCOS2D_ROOT
aux_source_directory(. DIR_SRCS) 
查找當前目錄中的所有源文件,把所有源文件名稱存儲在DIR_SRCS裏
include_directories( ${CMAKE_CURRENT_SOURCE_DIR}) 
將給定的目錄添加到編譯器用於搜索包含文件的目錄
target_link_libraries(a.out libahelp.a) 
添加鏈接庫
add_definitions(-g) 
加上編譯條件

cmake 常用的變量:

CMAKE_BINARY_DIR:
構建樹的頂層路徑
CMAKE_COMMAND:
指向CMake可執行文件的完整路徑
CMAKE_CURRENT_BINARY_DIR:
當前正在被處理的二進制目錄的路徑。
CMAKE_CURRENT_SOURCE_DIR:
指向正在被處理的源碼目錄的路徑。
CMAKE_HOME_DIRECTORY:
指向源碼樹頂層的路徑。
CMAKE_PROJECT_NAME:
當前工程的工程名。
CMAKE_ROOT:
CMake的安裝路徑。
CMAKE_SOURCE_DIR:
源碼樹的頂層路徑。
CMAKE_VERSION:
cmake的完整版本號。
PROJECT_BINARY_DIR:
指向當前編譯工程構建的全路徑。
<PROJECT-NAME>_BINARY_DIR:
指向當前編譯工程構建的全路徑。
<PROJECT-NAME>_SOURCE_DIR:
指向構建工程的全路徑。
PROJECT_SOURCE_DIR:
指向構建工程的全路徑。
PROJECT_NAME:
project命令傳遞的工程名參數。
<PROJECT-NAME>_VERSION:
項目的完整版本號。
CMAKE_C_COMPILER:
CMAKE_CXX_COMPILER:
指定編譯器
CMAKE_C_FLAGS:編譯C文件時的選項
EXECUTABLE_OUTPUT_PATH:可執行文件的存放路徑
LIBRARY_OUTPUT_PATH:庫文件路徑
CMAKE_BUILD_TYPE:
build 類型(Debug, Release, ...),CMAKE_BUILD_TYPE=Debug

一份簡單的cmake實例:

cmake_minimum_required (VERSION 2.8)
project (cepd)
link_directories(${PROJECT_SOURCE_DIR}/lib)
add_executable(cepd main.c cJSON.c)
set(CMAKE_C_COMPILER "arm-linux-gnueabihf-gcc")
set(CMAKE_CXX_COMPILER "arm-linux-gnueabihf-c++")
set(CMAKE_LD "arm-linux-gnueabihf-ld")
include_directories( ${PROJECT_SOURCE_DIR}/include)
target_link_libraries(cep libpaho-mqtt3as.so libpaho-mqtt3cs.so libcrypto.so libssl.so)

使用:

如果沒有編譯選項的時候
cmake .		//.指當前路徑
然後在當前路徑會生成一個makefile文件,執行編譯
make
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章