RTEMS Cmake写应用层小教程

RTEMS Cmake小教程

实验一:简单小工程并且指定输出位置

├─Afile
└─src
└─Afile.cpp
└─inc
└─Afile.h
└─User
└─main.cpp
└─build

效率太高了,只用了一个小时完成了达到用automake两天的学习想要的结果,而且参数简单明了
我们首先需要添加三个CMakeLists.txt,这三个文件的位置如下

├─Afile
└─src
└─Afile.cpp
└─inc
└─Afile.h
└─CMakeLists.txt
├─User
└─main.cpp
└─CMakeLists.txt
├─build
└─CMakeLists.txt

最外层的CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(TEST)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin) #设置输出路径,必须在add_subdirectory前面,否则运行到add_subdirectory,会去扫面这两个目录导致这句话无效
include_directories(Afile/inc) #设置include路径,能够传给子目录的CMakeLists的
add_subdirectory(Afile) #设置子目录路径
add_subdirectory(User)

User下的CMakeLists.txt

add_executable(main main.cpp)   #指定main函数所在的文件
target_link_libraries(main libA)    #所依赖的库文件

Afile下的CMakeLists.txt

add_library(libA src/A.cpp)     #指定要生成的为lib,并且指定编译所需要的文件

实验二:尝试闪灭LED灯

其实这里我们应该使用arm-none-eabi来进行试验然后再过度到rtems的工具链的。这里十分感谢陈笑行(hang)前辈,已经完成了这部分工作。有兴趣的可以参考这个https://github.com/XiaoxingChen/F1canBootLoader.git 有一个cmakeBranch分支,是一个很简单的小项目,很容易看懂的,这是对应的博客地址https://blog.csdn.net/buchunjiedexin/article/details/78170066

所以我这里就不再重复陈前辈的工作了,直接移植rtems工具链。
下面是我移植的工程,大家可以参考下https://github.com/MirrShad/rtems-app
首先按照之前的工程搭建模板
然后编译example-v2工程,然后根据他们输出信息进行推测。
设置输出gcc编译流程来和example-v2的编译信息进行对比

set(CMAKE_SYSTEM_NAME Generic)

然后因为我们的startup里面有汇编语言,所以需要设置汇编编译器

set(CMAKE_ASM_COMPILER arm-rtems4.11-as)

然后这个是库文件地址,这个需要小心点,-B只支持单层寻找库文件。就是如果发生一个库文件需要另一个库文件的情况,我们需要使用cmake中添加library的方法把下面地址中所有的lib一个个加进去。而且被需要的那个库文件要放在请求的那个库文件之后。rtems做的很好,没有嵌套。但是如果我们在写bsp的时候,打包了两个lib,可能会遇到这种情况

-B/home/andy/RTEMSspace/development/rtems/src/seer-rtems-stm32f4xx/arm-rtems4.11/seerstm32f4/lib/

猜你喜欢

转载自blog.csdn.net/qq_21856675/article/details/84331901