Cmake基础篇

1 前言

最近由于项目中需要用到三方库交叉编译,自学了Cmake,并进行了基础知识的总结,更详细的内容可以操控下面的链接。
参考文档:https://www.yuque.com/docs/share/d66b3695-cd45-43ca-bb3f-87f51ae589a6?# ;《CMake实战》

2 编译安装

最简单的就是命令安装:

apt-get install cmake

如果需要比较新的版本可以采用源码安装:
网络不是太好的可以github下载源码

wget https://cmake.org/files/v3.21/cmake-3.21.4-Linux-x86_64.tar.gz
tar zxvf cmake-3.21.4-Linux-x86_64.tar.gz
mv cmake-3.21.4-Linux-x86_64 /opt/cmake-3.21.4
ln -sf /opt/cmake-3.21.4/bin/* /usr/bin/

3 基本语法

cmake中关键字不区分大小写

#最小版本约定
cmake_minimum_required(VERSION 2.8)
#工程名称:不是执行文件名
PROJECT(projectname [CXX] [C] [Java])
#设置变量
SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])
#消息打印
MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] "message to display" ...)
#生成执行文件
ADD_EXECUTABLE([BINARY] [SOURCE_LIST])
#添加子目录
ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
#安装
#默认/usr/local/
#指定自定义安装目录,如 cmake -DCMAKE_INSTALL_PREFIX=/home/usr ..
#INSTALL的类型比较多
INSTALL(TARGETS <target>... [...])
INSTALL({FILES | PROGRAMS} <file>... [...])
INSTALL(DIRECTORY <dir>... [...])
INSTALL(SCRIPT <file> [...])
INSTALL(CODE <code> [...])
INSTALL(EXPORT <export-name> [...])
#添加头文件路径
INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/include")
#添加库文件路径
LINK_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/lib")
#生成库文件
ADD_LIBRARY( hello_shared SHARED libhello.cpp ) # 生成动态库
ADD_LIBRARY( hello_shared STATIC libHello.cpp ) 生成静态库
#链接库到执行文件上
TARGET_LINK_LIBRARIES(demo lib1 lib2)
#找在某个路径下的所有源文件,放到变量中
aux_source_directory(<dir> <variable>)

4 基本定义

#工程编译发生的目录
CMAKE_BINARY_DIR
#工程顶层目录
CMAKE_SOURCE_DIR
#当前目录
CMAKE_CURRENT_SOURCE_DIR
#变量用来定义自己的cmake 模块所在的路径
CMAKE_MODULE_PATH
#编译执行文件输出位置
EXECUTABLE_OUTPUT_PATH 
#编译库输出位置
LIBRARY_OUTPUT_PATH
#头文件路径
CMAKE_INCLUDE_PATH 
#库文件路径
CMAKE_LIBRARY_PATH 
#C编译选项
CMAKE_C_FLAGS
#C++编译选项
CMAKE_CXX_FLAGS

5 调用库

同时静态库、动态库 优先连接动态库,动态库只需要指定lib名称匹配即可;强制指定动态库需要利用全名才行如libhello.a

# 引用动态库
ADD_EXECUTABLE(demo ${SRC_LIST})
#同时静态库、动态库 优先连接动态库
#TARGET_LINK_LIBRARIES(demo Dir1)
# 强制使用静态库
TARGET_LINK_LIBRARIES(demo libDir1.a)

6 编译debug版本release版本

一般情况下项目对于发行文件有更高的编译等级要求,同时需要去掉一些调试信息和符号要求。需要区分调试版本和发行版本。
编译debug版本

cmake -DCMAKE_BUILD_TYPE=Debug …

编译release版本

cmake -DCMAKE_BUILD_TYPE=Release …

# 设置release版本还是debug版本
if(${CMAKE_BUILD_TYPE} MATCHES "Release")
message(STATUS "Release版本")
set(BuildType "Release")
SET(CMAKE_C_FLAGS "$ENV{CFLAGS} -DNODEBUG -O3 -Wall")
SET(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS} -DNODEBUG -O3 -Wall")
MESSAGE(STATUS "CXXFLAGS: " ${CMAKE_CXX_FLAGS})
MESSAGE(STATUS "CFLAGS: " ${CMAKE_C_FLAGS})
else()
set(BuildType "Debug")
message(STATUS "Debug版本")
SET(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS} -Wall -O0 -g")
# SET(CMAKE_C_FILAGS "-O0 -g")
SET(CMAKE_C_FLAGS "$ENV{CFLAGS} -O0 -g")
MESSAGE(STATUS "CXXFLAGS: " ${CMAKE_CXX_FLAGS})
MESSAGE(STATUS "CFLAGS: " ${CMAKE_C_FILAGS})
endif()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值