嵌入式linux: 使用Cmake交叉编译tslib库
在编译第三方库时,往往要指定头文件和库的链接地址,每次输入又比较麻烦,所以产生了是否能用Cmake交差编译嵌入式Linux的想法,经过实验确实可行,以下记录操作过程。
一、新建项目
项目目录如下:
.
|-- CMakeLists.txt #cmake文件
|-- arm_build #安放交叉编译生成的文件
|-- arm_linux_setup.cmake #指定编译器的配置文件
|-- build #安放gcc编译生成的文件
`-- 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指令,指定使用的交叉编译器
# DCMAKE_TOOLCHAIN_FILE=../arm_linux_setup.cmake为加载指定编译器文件 必须在编译camke文件..之前。
# cmake后想重新cmake编译,删除文件夹内的CMakeCache.txt文件即可。
cmake -DCMAKE_TOOLCHAIN_FILE=../arm_linux_setup.cmake ..
输出结果
3、输入make指令编译
make
输出结果
4、确定文件是否编译成功
file main
输出结果
显示为为32位arm编译,实验成功。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)