嵌入式Linux: 使用Cmake交叉编译tslib库

发布时间 2023-12-04 12:38:22作者: 风之忆一

在编译第三方库时,往往要指定头文件和库的链接地址,每次输入又比较麻烦,所以产生了是否能用Cmake交差编译嵌入式Linux的想法,经过实验确实可行,以下记录操作过程。

一、新建项目

项目目录如下:

arm_build:安放交叉编译生成的文件 

build: 安放gcc编译生成的文件 

arm_linux_setup.cmake 指定编译器  

CMakeLists.txt  cmake文件 

main.c 源文件

     

CMakeLists.txt  

# 配置cmake最低版本
cmake_minimum_required(VERSION 3.5)

#工程名字
project(demo)

#配置tslib的头文件和库文件地址
set(TSLIB_INCLUDE_DIRS /home/wm/docker_ubuntu/linux/code/tslib_code/tslib-1.22/tmp/include)
set(TSLIB_LIBRARIES /home/wm/docker_ubuntu/linux/code/tslib_code/tslib-1.22/tmp/lib/libts.so)

#定义一个可执行文件的目标
add_executable(main main.c)

#链接tslib库
target_include_directories(main PRIVATE ${TSLIB_INCLUDE_DIRS})
target_link_libraries(main PRIVATE ${TSLIB_LIBRARIES})

arm_linux_setup.cmake

#指定编译系统和硬件
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

#配置工具链安装地址
set(tools /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf)

#配置C/C++交叉编译器地址
set(CMAKE_C_COMPILER ${tools}/bin/arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER ${tools}/bin/arm-linux-gnueabihf-g++)

main.c

#include <stdio.h>
#include <tslib.h>

int main(void)
{
    struct tsdev *ts;

    ts = ts_setup(NULL,0);
    
    printf("hello,cmake!\r\n");
    return 0;
}

二、开始编译

1、打开项目文件中的arm_build文件夹

cd /home/wm/docker_ubuntu/study/test_tslib/arm_build

 2、输入cmake指令,指定使用的交叉编译器

      注意:1、-DCMAKE_TOOLCHAIN_FILE=../arm_linux_setup.cmake为加载指定编译器文件 必须在..之前。

                 2、cmake后想重新cmake编译,删除文件夹内的CMakeCache.txt文件即可。

cmake -DCMAKE_TOOLCHAIN_FILE=../arm_linux_setup.cmake ..

输出结果

3、输入make指令编译

make

 输出结果

4、确定文件是否编译成功

file main

输出结果

显示为为32位arm编译,实验成功。