cmake 片段代码:
######################################################################################################################
# COPYRIGHT #
# -----------------------------------------------------------------------------------------------------------------#
# This software is copyright protected and proprietary to Neusoft Reach. #
# Neusoft Reach grants to you only those rights as set out in the license conditions. #
# All other rights remain with Neusoft Reach. #
# -----------------------------------------------------------------------------------------------------------------#
# ####################################################################################################################
cmake_minimum_required(VERSION 3.2)
set(CMAKE_VERBOSE_MAKEFILE on)
include(GNUInstallDirs)
# Common Library--------------------------------------------------------------
find_package(ara-exec REQUIRED)
find_package(AdaptivePlatform REQUIRED)
find_package(ara-log REQUIRED)
find_package(Threads REQUIRED)
# Application Related --------------------------------------------------
add_definitions(-DHAS_VSOMEIP_BINDING)
find_package(ara-com REQUIRED)
find_package(e2e REQUIRED)
find_package(e2exf REQUIRED)
find_package(foonathan_memory REQUIRED)
set :
set
(<variable> <value>... [PARENT_SCOPE
])#设置普通变量
set
(<variable> <value>...CACHE
<type> <docstring> [FORCE
])#设置缓存条目
set
(ENV
{<variable>} [<value>])#设置环境变量
set
命令可以设置普通变量、缓存条目、环境变量三种变量的值
eg: set(CMAKE_VERBOSE_MAKEFILE ON) //Cmake 过程显示编译过程的详细信息
include:
include(<file|module> [OPTIONAL] [RESULT_VARIABLE <var>] [NO_POLICY_SCOPE])
include 指定包括的文件或模块
eg: include(GNUInstallDirs) //导入GNUInstallDirs模块,定义一组标准变量用于安装不同类型文件到规范的指定目录
include(test.cmake) //test.camke 是模块文件,一些重复使用语句代码可以写在.cmake文件中
find_package:
find_package(LAPACK REQUIRED)
查找程序编译必须安装的库, REQUIRED:必须找到该库否则停止, 以linux系统为例find_package通常去usr/local/lib/cmake/和 CMAKE_MODULE_PATH 指定目录下去找 ara-exec.make文件(以上面代码为例),从这个cmake文件获取到我们我们需要ara-exec库所需的头文件和库文件的路径。Cmake之深入理解find_package()的用法 - 知乎这位博主写的很清晰
add_definitions:
类似于C语言中定义一个宏。
下面代码是在shell脚本中指定指定程序宏和Cmake中宏的判定和指定
make.sh
if [ $1 = "release" ] && [ $2 = "system" ];then
board_type="system"
cmake -DCMAKE_BUILD_TYPE=Release -DBOARD_TYPE=system ../
elif [ $1 = "release" ] && [ $2 = "control" ];then
board_type="control"
cmake -DCMAKE_BUILD_TYPE=Release -DBOARD_TYPE=control ../
elif [ $1 = "debug" ] && [ $2 = "system" ];then
board_type="system"
cmake -DCMAKE_BUILD_TYPE=Debug -DBOARD_TYPE=system ../
elif [ $1 = "debug" ] && [ $2 = "control" ];then
board_type="control"
cmake -DCMAKE_BUILD_TYPE=Debug -DBOARD_TYPE=control ../
else
echo "parameter is not correct \n"
exit 1
fi
IF(CMAKE_BUILD_TYPE MATHCHES Debug)
ADD_DEFINITONS(-Dm32 -g -O0 -DARP_DECLARE_STATIC
-DARP_HAS_DSO
-DAPU_DECLARE_STATIC
-D_GNU_SOURCE
-D_DEBUG)
ELSEIF (CMAKE_BUILD_TYPE MATHCHES Release)
ADD_DEFINITONS(-Dm32 -DARP_DECLARE_STATIC
-DARP_HAS_DSO
-DAPU_DECLARE_STATIC
-D_GNU_SOURCE)
ELSE()
MESSAGE (STATUS "No DEFINITIONS")
ENDIF()
IF(BOARD_TYPE MATCHES system)
ADD_DEFINITONS(-DRUNTARGET=1)
ELSEIF(BOARD_TYPE MATCHES control)
ADD_DEFINITONS(-DRUNTARGET=0)
ELSE()
MESSAGE (STATUS "No DEFINITIONS")
ENDIF()