网站菜单

ARM嵌入式开发——CmakeList.txt编写基础(持续更新)

动机:从Eclipse转到CLion开发。CLion组织工程文件依赖cmake工具,只要编写好CMakeLists.txt,cmake工具就能帮我们生成Makefile,进而完成程序构建。如果所有源文件都在一个目录下,那么一个CMakeLists.txt就搞定了。

1. 确定cmake最低版本需求

cmake_minimum_required(VERSION 3.15)

2. 确定工程名字

project(xxx)

这个不是必须,但是最好写一下,这一行会引入两个变量XXX_BINARY_DIR (二进制文件保存路径)和 XXX_SOURCE_DIR(源代码保存路径)

3. 需要添加的库

#非必须,选定库位置
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "/usr/local/share/OpenCV")
#添加库
find_package(OpenCV REQUIRED)

find_package令CMake搜索所有名为Find.cmake的文件,3.2.0 REQUIRED给出需要的具体版本,以避免一台电脑安装了多个版本opencv而造成不必要的错误。通常情况下,通过设置CMAKE_PREFIX_PATH来设置CMake搜索路径,通常情况下不加也可以,但考虑到代码的可移植性,最好还是对搜索路径进行对应设置。

4. 添加头文件

#三种方法
include_directories(include)
include_directories(${OpenCV_INCLUDE_DIRS})
include_directories(/usr/local/cuda-8.0/include/)

如上,将头文件所在路径写在括号内即可(上例中将头文件放在了include文件夹中),而需要的一些库的头文件可以如2行变量的形式,也可以如3行直接给出库头文件所在的位置。

5. 确定编译语言

set(CMAKE_CXX_STANDARD 14)

6. 添加源代码

set(SOURCE_FILES main.cpp)

7. 生成可执行文件

add_executable(untitled main.cpp)

8. 编译动态库并链接库文件

target_link_libraries(untitled ${OpenCV_LIBS})

以上为cmakelist.txt基础结构。

—————————————————————————

以下为当前项目实例

#define cmake version
cmake_minimum_required(VERSION 3.15)

#set(CMAKE_SYSTEM_PROCESSOR aarch64)
#set(GCC_COMPILER_VERSION "" CACHE STRING "GCC Compiler version")
#define compilers
#set(CMAKE_C_COMPILER "/usr/bin/aarch64-linux-gnu-gcc")
#set(CMAKE_CXX_COMPILER "/usr/bin/aarch64-linux-gnu-g++")

#define project name
project(untitled)

#find package
find_package(OpenCV REQUIRED)
if(NOT OpenCV_FOUND)
    message(WARNING "OpenCV not found!")
else()
    #add head file
    include_directories(${OpenCV_INCLUDE_DIRS})
endif()
# define compile language
set(CMAKE_CXX_STANDARD 14)
#add source code
set(SOURCE_FILES main.cpp)
#generate executable file
add_executable(untitled main.cpp)
#link libraries
target_link_libraries(untitled ${OpenCV_LIBS})

参考

CMakeList的基本写法

https://blog.csdn.net/u010122972/article/details/78216013
显示评论 (0)

文章评论

相关推荐

Yolov5_Seg输出解析

通过矩阵乘法(在代码中称为“matmul”)来计算分割掩码的原因,主要与实例分割网络(例如 YOLOv5 Segmentation)的实现方式有关。这种方法实际上是一种高效的特征图与目标分割系数组合的…

Ubuntu交叉编译Python

在 Ubuntu 上交叉编译 Python 的流程通常用于为不同平台生成可执行文件(如 ARM、MIPS 等)。以下是一般的操作步骤: 1. 安装必要的依赖工具 首先,确保已经安装了编译所需的工具和依…