- cmake_minimum_required 指定cmake最小版本
#命令可选,如果 CMakeLists.txt 文件中使用了高版本cmake命令,需要加上这样一行,提醒用户升级到该版本之后再执行cmake,以防版本不满足导致编译失败。
cmake_minimum_required(VERSION 2.6)
- project 设置项目名称
#命令可选,它会引入两个变量 yolov5_BINARY_DIR和yolov5_SOURCE_DIR,
#同时,cmake 自动定义了两个等价的变量 PROJECT_BINARY_DIR 和 PROJECT_SOURCE_DIR。
PROJECT_BINARY_DIR = 全路径/build,PROJECT_SOURCE_DIR = 全路径/src
project(yolov5)
- add_definitions 添加编译器命令行标志
1)通常的情况下我们使用其来添加预处理器定义
add_definitions(-std=c++11)
add_definitions(-Og -pthread)
2)结合option使用,控制代码编译开关的开启和关闭。
首先cpp代码为
#ifdef BOOSTON
#include <boost/thread.hpp>
#include "boost/thread/mutex.hpp"
#endif
对应的cmakelist.txt为
option(USEBOOST "run with boost" OFF)
IF(USEBOOST)
add_definitions(-DBOOSTON)
ENDIF(USEBOOST)
编译的时候可以设置USEBOOST开启或者关闭
cmake -DBOOSTON=1 ..
cmake -DBOOSTON=0 ..
- set / list 设置别名(赋值)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_BUILD_TYPE Debug)
set(SRC_LIST yolo.cpp)
add_executable(yolo ${SRC_LIST})
- message 打印信息
message(${SOURCE_DIR})
message(“the system is ubuntu”) - include_directories 添加第三方库包含的目录(即找头文件)
include_directories(/usr/local/cuda/include)
#路径多的时候也可以写成
include_directories(
${PROJECT_SOURCE_DIR}/ina
${PROJECT_SOURCE_DIR}/inb
${PROJECT_SOURCE_DIR}/inc
)
- link_directories 添加需要链接的库文件目录(即找 .so库文件)
link_directories(/usr/local/cuda/lib64)
- aux_source_directory 搜索所有的 cpp 文件
aux_source_directory(./srca SRCA_LIST)
aux_source_directory(./srcb SRCB_LIST)
aux_source_directory(./srcc SRCC_LIST)
- find_package 当编译一个需要使用第三方库的软件时,需要知道其头文件和库文件的目录,可以通过该命令查找
find_package(<PackageName> [version] [EXACT] [QUIET] [REQUIRED])
找到后,默认头文件路径PackageName_INCLUDE_DIR,库文件路径PackageName_LIBRARY。
version: 版本合适(大版本号相同)
EXACT: 版本必须一致
QUIET: 没找到包也不会报错
REQUIRED: 必须找到该包,否则停止
例如:
find_package(CUDA REQUIRED)
include_directories($ {CUDA_INCLUDE_DIR})
link_directories($ {CUDA__LIBRARY})
- add_library 指定编译yolov5 的链接库
add_library(yolov5 ${SRCA_LIST} ${SRCB_LIST} ${SRCC_LIST})
- target_link_libraries 对 add_library 或 add_executable 生成的文件进行链接操作
target_link_libraries(myplugins nvinfer cudart)