CMake基础语法
文章目录
- CMake与Make的关系
- 变量
- 变量类型
- 环境变量(系统层级与cmake无关)
- cmake缓存变量
- cmake普通变量
- ${变量名}
- set(<变量名> <值>)
- cmake_minimum_required(VERSION <版本号>)
- project(< 工程文件名 >)
- find_package(<包名>)
- install(TARGETS < 目标文件 > DESTINATION < 安装位置 >)
- 安装目标文件(所有类型)
- 安装文件夹
- 其他
- add_executable(<可执行文件名> <源文件列表>)
- message( <日志类型> "<打印信息>")
CMake与Make的关系
在linux当中,其关系如下
注意:CMake本身并不提供编译工具,仅提供连接关系,也就是说仍然需要安装gcc等编译工具
变量
变量类型
环境变量(系统层级与cmake无关)
存在操作系统中,用$ENV{}访问
cmake缓存变量
缓存变量 存在 CMakeCache.txt 中(永久)
用${}访问
cmake普通变量
普通变量 只在CMake运行期间存在(临时)
用${}访问
${变量名}
这些变量可以在build目录下的CMakeCache.txt当中查看
catCMakeCache.txt|grepPROJECT_NAMEset(<变量名> <值>)
设置变量
cmake_minimum_required(VERSION <版本号>)
规定了此CMakeLists.txt所需要的最小的cmake版本
project(< 工程文件名 >)
当你写了 project(cpp05_exercise),CMake 会自动定义以下内容
基本变量
${PROJECT_NAME} # cpp05_exercise
${CMAKE_PROJECT_NAME} # cpp05_exercise
${PROJECT_SOURCE_DIR} # 源码目录路径
${PROJECT_BINARY_DIR} # 构建目录路径
如果有版本号
${PROJECT_VERSION} # 1.0.0 (如果指定了)
${PROJECT_VERSION_MAJOR} # 1
${PROJECT_VERSION_MINOR} # 0
${PROJECT_VERSION_PATCH} # 0
其他相关变量
${PROJECT_SOURCE_DIR} # 当前项目的源码目录
${PROJECT_BINARY_DIR} # 当前项目的构建目录
find_package(<包名>)
用于自动查找功能包
#1.最基本形式find_package(rclcpp)#2.必需包(找不到就报错)find_package(rclcpp REQUIRED)#3.指定版本find_package(Python33.6REQUIRED)install(TARGETS < 目标文件 > DESTINATION < 安装位置 >)
安装目标文件(所有类型)
install(TARGETS < 目标文件 >
…
…
DESTINATION < 安装到哪里 >)
install(TARGETS demo01_talker_str demo02_listener_str demo03_talker_stu demo04_listener_stu DESTINATION lib/${PROJECT_NAME})安装文件夹
install(DIRECTORY < 目标文件夹 >
…
…
DESTINATION < 安装到哪里 >)
install(DIRECTORY launch DESTINATION share/${PROJECT_NAME})其他
install(FILES < file >… […])
install(SCRIPT < file > […])
install(CODE < code > […])
install(EXPORT < export-name > […])
install(RUNTIME_DEPENDENCY_SET < set-name > […])
add_executable(<可执行文件名> <源文件列表>)
添加可执行文件
add_executable(demo01_talker_str src/demo01_talker_str.cpp)注意:一个可执行文件只能有一个main函数 (源文件列表只能有一个main,但可以增加别的被调用的cpp)
在源文件列表当中只需要包含cpp文件即可(h文件不用写在里面)
message( <日志类型> “<打印信息>”)
日志类型
STATUS:在终端会以 --(两个横线加空格)为前缀显示
WARNING:黄色警告(构建会继续)
SEND_ERROR:错误(跳过生成,但继续处理)
FATAL_ERROR:致命错误(立即终止处理)
