CMake 教程

2024-07-03  本文已影响0人  leon0514

CMake 概述

CMake是一个跨平台的编译(Build)工具,可以用简单的语句来描述所有平台的编译过程。

CMake 常见的宏

后面会用到,先在前面做个记录

功能
PROJECT_SOURCE_DIR 使用cmake命令后紧跟的目录,一般是工程的根目录
PROJECT_BINARY_DIR 执行cmake命令的目录
CMAKE_CURRENT_SOURCE_DIR 当前处理的CMakeLists.txt所在的路径
CMAKE_CURRENT_BINARY_DIR target 编译目录
EXECUTABLE_OUTPUT_PATH 重新定义目标二进制可执行文件的存放位置
LIBRARY_OUTPUT_PATH 重新定义目标链接库文件的存放位置
PROJECT_NAME 返回通过PROJECT指令定义的项目名称
CMAKE_BINARY_DIR 项目实际构建路径,假设在build目录进行的构建,那么得到的就是这个目录的路径

CMake 使用

注释

CMake测试

进一步优化CMakeLists.txt

制作静态库

制作动态库

设置库文件生成路径

同时生成静态库和动态库

文件结构

.
├── CMakeLists.txt
├── build
├── lib
├── src
│   ├── main.cpp
│   └── operator
│       ├── add.cpp
│       ├── add.hpp
│       ├── sub.cpp
│       └── sub.hpp
└── workspace

5 directories, 6 files

CMakeLists.txt

cmake_minimum_required(VERSION 3.0)

project(CALC)
set(CMAKE_CXX_STANDARD 11)

include_directories(src)

set(HOME /mnt/d/workspace/code/cmaketest/prj1)
set(LIBRARY_OUTPUT_PATH ${HOME}/lib) 
file(GLOB_RECURSE SRC_LIST src/operator/*.cpp)


add_library(calc_shared SHARED ${SRC_LIST})
add_library(calc_static STATIC ${SRC_LIST})
set_target_properties(calc_shared PROPERTIES OUTPUT_NAME "calc")
set_target_properties(calc_static PROPERTIES OUTPUT_NAME "calc")

CMake链接库文件

CMake链接静态库和动态库的区别

CMake链接静态库

CMake链接动态库

测试库文件链接

CMake日志

变量操作

宏定义

在进行程序测试的时候,我们可以在代码中添加一些宏定义,通过这些宏来控制这些代码是否生效。如下所示

#include <stdio.h>
#define NUMBER  3

int main()
{
  int a = 10;
#ifdef DEBUG
  printf("我是一个程序猿, 我不会爬树...\n");
#endif
  for(int i=0; i<NUMBER; ++i)
  {
      printf("hello, GCC!!!\n");
  }
  return 0;
}

在CMake中可以通过add_definitions命令来添加宏。语法如下

add_definitions(-D宏名称)

CMake配置交叉编译工具链

在CMakeLists 同级目录下新建一个 toolchain.cmake 文件,在这个文件里加上如下内容

# 指定目标系统
set(CMAKE_SYSTEM_NAME Linux)
# 指定目标平台
set(CMAKE_SYSTEM_PROCESSOR arm)
 
# 指定交叉编译工具链的根路径
set(CROSS_CHAIN_PATH /path/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf)
# 指定C编译器
set(CMAKE_C_COMPILER "${CROSS_CHAIN_PATH}/bin/arm-linux-gnueabihf-gcc")
# 指定C++编译器
set(CMAKE_CXX_COMPILER "${CROSS_CHAIN_PATH}/bin/arm-linux-gnueabihf-g++")

编译时指定

cmake .. -DCMAKE_TOOLCHAIN_FILE=../toolchain.cmake

CMAKE_BUILD_TYPE

CMAKE_BUILD_TYPE 是 CMake 中一个用于指定构建类型的内置变量。在使用 CMake 构建项目时,可以使用这个变量来指定编译器使用的编译选项和构建类型。
CMAKE_BUILD_TYPE的默认值是空字符串, 可以使用命令查看

cmake --system-information | grep CMAKE_BUILD_TYPE
leon@leon:build$ cmake --system-information | grep CMAKE_BUILD_TYPE
CMAKE_BUILD_TYPE == ""
CMAKE_BUILD_TYPE ""
CMAKE_BUILD_TYPE:STRING=

文章参考

写的很好
CMake 保姆级教程(上) | 爱编程的大丙 (subingwen.cn)

上一篇 下一篇

猜你喜欢

热点阅读