CMake学习笔记(编译lvgl)

前言

cmake是个自动组织makefile的重要工具,因此学习cmake的使用也是很有必要的。

1工程组织结构

.

├── build
├── CMakeLists1.txt #1
└── src
    ├── CMakeLists2.txt
    ├── lv_conf.h
    ├── lv_drivers
    │   ├── CMakeLists3.1.txt
    │   ├── display
    │   ├── docs
    │   ├── indev
    │   ├── lv_drv_conf_templ.h
    │   ├── win_drv.c
    │   └── win_drv.h
    ├── lv_drv_conf.h
    ├── lv_examples
    │   ├── *CMakeLists3.2.txt
    │   ├── docs
    │   ├── lv_apps
    │   ├── lv_examples.h
    │   ├── lv_ex_conf_templ.h
    │   ├── lv_tests
    │   ├── lv_tutorial
    ├── lv_ex_conf.h
    ├── lvgl
    │   ├── CMakeLists3.3.txt
    │   ├── docs
    │   ├── lv_conf_template.h
    │   ├── lvgl.h
    │   ├── porting
    │   ├── scripts
    │   └── src
    └── main.c

整个LittleVGL工程的CMakeLists.txt分为三层,用后缀名予以区分为1、2、3.1、3.2、3.3三个层次。

2CMakeLists.txt详细解析

2.1 顶层 CMakeLists1.txt

cmake_minimum_required (VERSION 2.8)  
//cmake最低使用版本

set(CMAKE_C_COMPILER "/usr/local/tools/arm-2009q3/bin/arm-none-linux-gnueabi-gcc") 
//设置编译器,此处为ARM平台

link_libraries("/home/kknight/Linux/tslib-1.4/tmp/lib/libts.so")
//链接使用的库,相当于gcc -L/xxx/xxx

project(little_prj)
//工程名

add_subdirectory(src)
//添加src目录

2.2 次顶层 CMakeLists2.txt

SET(CMAKE_BUILD_TYPE "Debug")
SET(CMAKE_C_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb ")
SET(CMAKE_C_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

aux_source_directory(. DIR_SRC) //将当前c文件名添加至DIR_SRC

add_subdirectory(lvgl)        //添加目录 lvgl
add_subdirectory(lv_examples) //添加目录 lv_examples
add_subdirectory(lv_drivers)  //添加目录 lv_drivers

include_directories(./lvgl/)  //设置头文件路劲
include_directories(../../tslib/include)
add_executable(little_prj ${DIR_SRC})  //链接生成文件little_prj 由DIR_SRC链接。

find_package(Threads)

set(VAR lvgl_lib)
set(VAR ${VAR} lv_drivers_lib)
set(VAR ${VAR} lv_examples_lib)
message("VAR : ${VAR}")
target_link_libraries(little_prj ${VAR})   //设置链接little_prj的 依赖关系 ,依赖 VAR = lvgl_lib lv_drivers
#target_link_libraries(little_prj libts.so)
target_link_libraries(little_prj ${CMAKE_THREAD_LIBS_INIT})

2.3 次顶层 CMakeLists3.1.txt

aux_source_directory(./src/lv_core/  DIR_LITTLE_SRC)    //添加目录下源文件到 DIR_LITTLE_SRC
aux_source_directory(./src/lv_draw/  DIR_LITTLE_SRC)
aux_source_directory(./src/lv_font/  DIR_LITTLE_SRC)
aux_source_directory(./src/lv_hal/   DIR_LITTLE_SRC)
aux_source_directory(./src/lv_misc/  DIR_LITTLE_SRC)
aux_source_directory(./src/lv_objx/  DIR_LITTLE_SRC)
aux_source_directory(./src/lv_themes/  DIR_LITTLE_SRC)

add_library(lvgl_lib ${DIR_LITTLE_SRC} )			//链接所有DIR_LITTLE_SRC包含的源文件到 lvgl_lib

另外的 次顶层 CMakeLists3.2.txt 次顶层 CMakeLists3.3.txt跟CMakeLists3.1.txt相似

3编译操作过程

用cmake .命令来生成makefile的话,会有很多附带生成过程文件,因此一般在src工程的同级目录,再建一个build文件夹,然后cd到build文件夹,用cmake … 指令去生成makefile。

由于我的工程使用cmake指定编译器还带bug,因此还需要使用cmake命令时,还需要带参数-D CMAKE_CXX_COMPILER=xxx指定编译器路径,因此我的cmake指令就是

cmake  -D CMAKE_C_COMPILER=/usr/local/tools/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc -D CMAKE_CXX_COMPILER=/usr/local/tools/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ ..

打印信息如下
在这里插入图片描述
后执行make指令即可进行编译
在这里插入图片描述

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值