0
点赞
收藏
分享

微信扫一扫

【Linux下C++开发】第四篇·CMake

飞空之羽 2022-02-28 阅读 79
linuxc++bash

系列文章目录

·【Linux下C++开发】第一篇·Linux系统基本操作
·【Linux下C++开发】第二篇·开发环境搭建及gcc编译器
​·【Linux下C++开发】第三篇·使用VSCode进行C++开发
·【Linux下C++开发】第四篇·CMake


文章目录


一、语法特性

基本语法格式:指令(参数1 参数2 … 参数n)
参数使用括号括起;参数之间使用空格或分号分隔
指令不区分大小写,但参数区分大小写。
例如:

set(HELLO hello.cpp) #设置变量HELLO值为hello.cpp
add_executable(hello main.cpp hello.cpp)
ADD_EXECUTABLE(hello main.cpp $(HELLO)) #这一行与上一行等价

变量可以使用${}的方式取值


二、重要指令和CMake常用变量

1.CMake常用指令

1.cmake_minimum_required
作用:指定CMake的最小版本要求
语法:cmake_minimum_required(VERSION versionNumber)

# 声明要求的 cmake 最低版本
cmake_minimum_required(VERSION 2.8)

2.project
作用:定义工程名称,并可指定工程支持的语言
语法:project(projectname [CXX] [C] [Java])

# 声明一个 cmake 工程
project(HelloSLAM)

3.set
作用:显式的定义变量
语法:set(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])

# 设置编译模式
set(CMAKE_BUILD_TYPE "Debug")
# 定义SRC变量,其值为main.cpp hello.cpp
set(SRC main.cpp hello.cpp

4.include_directories
作用:向工程添加多个特定的头文件搜索路径(相当于g++的-I参数)
语法:include_directories([AFTER] [BEFORE] [SYSTEM] dir1 dir2)

# 指定头文件路径是当前目录下的include文件
include_directories(./include)

5.link_directories
作用:向工程添加多个特定的库文件搜索路径(相当于g++的-L参数)
语法:link_directories(dir1 dir2)

# 将./lib添加到库文件搜索路径
link_directories(./lib)

6.add_library
作用:生成库文件
语法:add_library(libname [SHARED] [STATIC] source1 source2 … sourceN)

# 添加hello库
add_library(hello libHelloSLAM.cpp)
# 共享库
add_library(hello_shared SHARED libHelloSLAM.cpp)

7.add_compile_options
作用:添加编译参数
语法:add_compile_options( …)

add_compile_options(-wall -std=c++1 -o2)

8.add_executable
作用:生成可执行文件
语法:add_executable(exename source1 source2 … sourceN)

# 添加一个可执行程序
add_executable(helloSLAM helloSLAM.cpp)

9.target_link_libraries
作用:为target添加需要链接的库(相当于g++编译中的-l参数)
语法:target_link_libraries(target library1 library2 … )

# 将库文件链接到可执行程序上
target_link_libraries(useHello hello_shared)

2.CMake常用变量

CMAKE_BUILD_TYPE:编译类型(Debug,Release)

# 设置编译模式
set(CMAKE_BUILD_TYPE "Debug")

EXECUTABLE_OUTPUT_PATH:可执行文件输出的存放路径
LIBRARY_OUTPUT_PATH:库文件输出的存放路径


三、CMake编译工程

两种编译规则:

  1. 包含源文件的子文件夹包含CMakeList.txt文件,主目录的CMakeList.txt通过add_subdirectory添加子目录
  2. 包含源文件的子文件夹不包含CMakeList.txt文件,子目录的编译规则体现在主目录的CMakeList.txt中

编译流程:

  1. 手动编写CMakeList.txt
  2. 执行命令cmake PATH生成Makefile
  3. 执行命令make进行编译

一般都是新建一个build文件夹,将中间文件都存放在build文件中,而在上层目录存放源文件
在CMakeLists.txt文件中可以加一行这样的代码,来优化程序:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O2 -Wall")
举报

相关推荐

0 条评论