文章目录
前言
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指令即可进行编译