1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 使用CMAKE和交叉编译工具链

使用CMAKE和交叉编译工具链

时间:2019-04-10 23:31:05

相关推荐

使用CMAKE和交叉编译工具链

记录使用CMake过程中的一段CMakeLists.txt的代码以及交叉编译脚本cross.cmake的代码。

文章目录

一、CMakeLists.txt二、cross.cmake总结

提示:代码中包含了解释和使用提示,可直接使用。

一、CMakeLists.txt

cmake_minimum_required(VERSION 3.5) #最低应用版本#cross compile option (ON/OFF) 开启交叉编译的option(BUILD_RK3588 "Whether or not to use the cross tools" ON) #宏定义开关if(BUILD_RK3588) #选择语句include(./cross.cmake) #包含.cmake脚本endif() project(ADC) #创建工程aux_source_directory(${PROJECT_SOURCE_DIR} SOURCE_FILE) #参数之间空格隔开,命令不分大小写,参数分大小写, 提取当前文件下源文件列表赋给变量SOURCE_FILE#设置C/C++ 编译的参数(根据需要自己设置)SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") set(CMAKE_CXX_FLAGS " -o -Wall -pthread -g -lm -ldl -DLINUX_OS -lstdc++fs -fpermissive -pipe -fPIC -ffunction-sections ${CMAKE_CXX_FLAGS}")add_executable(adc_test ${SOURCE_FILE}) #用于指定从一组源文件 source1 source2 … sourceN 编译出一个可执行文件且命名为 adc_testset(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build/bin) #用于输出可执行文件输出路径#CMAKE_CXX_FLAGS这种大写的变量,一般都是CMake预定义的内建变量,且他们是全局的。该变量可用于设置编译选项。直接使用set修改其值即可。#除了修改该变量的值之外,还可以通过add_compile_options命令来设置编译选项。它们的区别是:#add_compile_options命令添加的编译选项是针对所有编译器的(包括c和c++编译器),CMAKE_C_FLAGS或CMAKE_CXX_FLAGS变量则是分别只针对c和c++编译器

二、cross.cmake

代码如下(示例):

# Indicate cross-compilation 定义CMAKE_SYSTEM_NAME后将自动设置为TRUESET(CMAKE_CROSSCOMPILING true)# Indicate target operate system 这是必需的,它是目标系统的名称,构建的目标平台SET(CMAKE_SYSTEM_NAME Linux)# Indicate architecture 目标系统的可选,处理器(或硬件)。要构建的目标架构SET(CMAKE_SYSTEM_PROCESSOR arm)# Indicate toolchain path 设置编译工具链路径SET(TOOLCHAIN_DIR "/opt/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-.07-x86_64-aarch64-none-linux-gnu")# The first search path 这是一个目录列表,其中列出的每个目录都将被添加到每个FIND_XXX()命令的每个搜索目录中。SET(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_DIR}) #指定交叉编译环境的目录 , 指定交叉编译环境安装目录…# The second search path CMAKE_SYSROOT只有在3.0以上的版本才有效,指定编译器--sysroot编译参数,变量也可以用来指定一个目录作为搜索目录前缀SET(CMAKE_SYSROOT ${TOOLCHAIN_DIR}/aarch64-none-linux-gnu/libc) #默认先搜索CMAKE_FIND_ROOT_PATH,之后搜索CMAKE_SYSROOT,最后搜索其他non-rooted路径# C/C++ compiler path 编译器可执行文件,可以是完整路径,也可以只是文件名SET(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/bin/aarch64-none-linux-gnu-gcc)SET(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/aarch64-none-linux-gnu-g++)# The install path 为Cmake内置变量,用于指定Cmake执行install目标时,安装的路径前缀SET(CMAKE_INSTALL_PREFIX ${CMAKE_SYSROOT}/libc/usr)#从来不在指定目录下查找工具程序SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) #在大多数情况下,需要构建主机的可执行文件,因此通常将CMAKE_FIND_ROOT_PATH_MODE_PROGRAM设置为NEVER。#只在指定目录下查找库文件SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) #在大多数情况下,这用于查找将用于链接的库,因此需要用于目标的库。因此,在常见情况下,将其设置为ONLY。#只在指定目录下查找头文件SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) #在许多情况下,这用于查找包含目录,因此应搜索目标环境。因此,在常见情况下,将其设置为ONLY。您可能必须使用#设置C++ 编译的参数(根据需要自己设置)set(CMAKE_CXX_FLAGS "-o -Wall -g -lm -ldl -DLINUX_OS -fpermissive -pipe -fPIC -ffunction-sections ${CMAKE_CXX_FLAGS}")#使用一对双引号包裹的被认为是一个参数# -Wall : 编译时显示警告信息# -O: 选择编译器优化的级别,-O0 不优化 -O1 -O2 -O3 不同程度的优化# -g: 生成调试信息,debug会用到。调试信息的级别。-g3 # 尽可能的生成gdb的可以使用的调试信息。默认为-g2。信息越多,编译出的程序越大。# -std=c++11 : 编译所按照C++的标准# -fmessage-length=0 :输出信息会根据控制台的宽度自动换行,这样就能看全输出信息了# -fPIC : 作用于编译阶段,告诉编译器产生与位置无关代码# (Position-Independent Code)。加载到任意位置都能执行# -DTEST : 设置TEST的宏定义,另外一种设置宏定义的方式可以直接使用 add_definitions(-D TEST) 添加# -fpermissive : 该选项会将不一致代码的诊断从错误降级为警告。

勤使用,才能掌握~!

总结

参考太多文章,都在收藏里了。

其中有一个令我受益匪浅:CMake简介及使用,基础食用很香,配合使用极佳!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。