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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章