【CC3200】【eegRudp】使用CMake组织工程

本文详细介绍了如何在IAR工程中使用CMake进行构建,包括环境配置、工具链文件设置以及CMakeLists.txt的编写。通过示例项目eegRudp,展示了如何生成静态和动态链接库,并提供了在Windows环境下使用MinGW Makefiles的构建步骤。此外,还提到了针对CC3200平台的工具链配置以及不同平台的链接库处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CMake简介

CMake 是一个跨平台的、开源的构建工具。cmake 是 makefile 的上层工具,它们的目的正是为了产生可移植的makefile,并简化自己动手写makefile时的巨大工作量。能测试编译给i他器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CMakeLists.txt。
本文将介绍如何在IAR工程中使用CMake。

环境配置

  • 在windows下使用IAR Embedded Workbench可以编译在8051,Arm, AVR, MSP430, RH850, RISC-V, RL78, RX 和V850平台上运行的项目,而Linux平台上可以使用IAR Build Tools编译Arm or RH850上运行的代码。
  • CMake版本需要高于v3.15.7
  • MinGW CMake
准备CC3200工具链文件

在交叉编译场景中,“工具链文件”(.cmake)是不可缺少的,其中包含有关编译器、汇编程序、链接器及其各自选项设置的信息。
toolchain-CC3200.cmake:

### BEGIN CMAKE_TOOLCHAIN_FILE
# "Generic" is used when cross compiling
set(CMAKE_SYSTEM_NAME Generic)

# Set the EW installation root directory
#(Avoid spaces in the path or you need to escape them)
set(EW_ROOT_DIR "F:/ti/IAR/arm")

# Compiler flags needed to compile for this CPU
# set(CPU_FLAGS "--cpu cortex-m4")

# Set up the CMake variables for compiler and assembler
# (The reason for both C and CXX variables is that CMake
# treats C and C++ tools individually)
set(CMAKE_C_COMPILER "${EW_ROOT_DIR}/bin/iccarm.exe" "${CPU_FLAGS} --dlib_config normal")
set(CMAKE_CXX_COMPILER "${EW_ROOT_DIR}/bin/iccarm.exe" "${CPU_FLAGS} --dlib_config normal")
set(CMAKE_ASM_COMPILER "${EW_ROOT_DIR}/bin/iasmarm.exe" "${CPU_FLAGS}")

# Set up the CMake variables for the linker
set(LINKER_SCRIPT "${EW_ROOT_DIR}/config/linker/TexasInstruments/cc3200.icf")
set(CMAKE_C_LINK_FLAGS "--semihosting --config ${LINKER_SCRIPT}")
set(CMAKE_CXX_LINK_FLAGS "--semihosting --config ${LINKER_SCRIPT}")
### END CMAKE_TOOLCHAIN_FILE

RUDP项目例子:
在这个项目中用到了IAR Embedded Workbench for Arm、CMake、和Mingw32-make来构建可执行文件,其中也在CMake环境中设置了预处理符号。

eegRudp
├── CMakeLists.txt
├── include
│   └── ffrdp.h
├── readme.txt
├── src
│   ├── ffrdp.c            -->demo files
│   └── win_test.c
└── toolchain-CC3200.cmake -->toolchain file
|
|——release                 -->output folder

这个工程最终会输出一个静态链接库和动态链接库。以下CMake有详细的注释:
CMakeLists.txt

cmake_minimum_required(VERSION 3.2)

#项目名
project(libeegdp)

# 1、指定库的目录变量
set(libeegdp_src src/ffrdp.c)
# 指定头文件搜索路径
include_directories("${PROJECT_SOURCE_DIR}/include")

# 2、添加库(对应的两个项目)
add_library( eegdp_shared SHARED ${libeegdp_src})
add_library( eegdp_static STATIC ${libeegdp_src})
#  按照一般的习惯,静态库名字跟动态库名字应该是一致的,只是扩展名不同;
# 即:静态库名为 libeegdp.a; 动态库名为libeegdp.so ;
# 所以,希望 "eegdp_static" 在输出时,不是"eegdp_static",而是以"eegdp"的名字显示,故设置如下
# SET_TARGET_PROPERTIES (eegdp_static PROPERTIES OUTPUT_NAME "eegdp")

# 3、cmake在构建一个新的target时,会尝试清理掉其他使用这个名字的库,
# 因此,在构建libeegdp.a时,就会清理掉libeegdp.so.
# 为了回避这个问题,比如再次使用SET_TARGET_PROPERTIES定义 CLEAN_DIRECT_OUTPUT属性。
SET_TARGET_PROPERTIES (eegdp_static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
SET_TARGET_PROPERTIES (eegdp_shared PROPERTIES CLEAN_DIRECT_OUTPUT 1)


# 4、按照规则,动态库是应该包含一个版本号的,
# VERSION指代动态库版本,SOVERSION指代API版本。
SET_TARGET_PROPERTIES (eegdp_static PROPERTIES VERSION 1.1 SOVERSION 1)
SET_TARGET_PROPERTIES (eegdp_shared PROPERTIES VERSION 1.1 SOVERSION 1)

# 添加连接库(socket and systick)
IF (WIN32)
TARGET_LINK_LIBRARIES(eegdp_static Ws2_32.lib)
TARGET_LINK_LIBRARIES(eegdp_shared Ws2_32.lib)
TARGET_LINK_LIBRARIES(eegdp_static winmm.lib)
TARGET_LINK_LIBRARIES(eegdp_shared winmm.lib)
ADD_DEFINITIONS(-D WIN32)
ELSEIF(UNIX)
ELSE() #CC3200链接库
ADD_DEFINITIONS(-D CC3200)
include_directories("${PROJECT_SOURCE_DIR}/../../simplelink/include")
include_directories("${PROJECT_SOURCE_DIR}/../../driverlib")
TARGET_LINK_LIBRARIES(eegdp_static "${PROJECT_SOURCE_DIR}/../../simplelink/ewarm/OS/Exe/simplelink.a")
TARGET_LINK_LIBRARIES(eegdp_static "${PROJECT_SOURCE_DIR}/../../driverlib/ewarm/Release/Exe/driverlib.a")
ENDIF()
构建项目
  1. 运行CMake
    此工程使用外部构建,与内部构建这种直接在项目内部cmake的方式不同,外部构建在一个临时文件夹下面运行cmake构建工程,其特点是构建文件不会在原工程下生成,方便拷贝与删除构建文件。具体的做法是:在源码目录的同级下创建release文件夹,命令行工具进入此文件夹,输入如下命令:
	cmake -H. -Bbuild -G "MinGW Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain-CC3200.cmake
  1. 运行mingw32-make
	mingw32-make
  1. 编译成功,输出静态库与动态库文件
    在这里插入图片描述

BUG记录:https://editor.youkuaiyun.com/md?not_checkout=1&articleId=114087340
Github:https://github.com/EEGWIFI/eegRudp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值