STM32MP1 A7核心下CppUTest交叉编译配置问题咨询
STM32MP1 Cortex-A7项目集成CppUTest交叉编译解决方案
问题背景
基于STM32MP1 Cortex-A7处理器开发项目,需将CppUTest测试框架集成到交叉编译构建流程中。当前使用VirtualBox Linux环境,已通过SDK脚本激活交叉编译工具链:
source /opt/poky-bytesatwork/3.2.2/environment-setup-cortexa7t2hf-neon-vfpv4-poky-linux-gnueabi
项目现有Makefile片段如下:
CXX ?= g++ APP = stb BIN = bin/ GIT_REVISION := $(shell git describe --abbrev=10 --dirty --always) INCLUDE = -ICommandInterface -ICommon -IDataHandling -IFakeDevices -IHardwareInterface \ -ILocalTest -ILocalTest/Tests -ILocalTest/Tests/A7tests -ILocalTest/CppUTest/include SOURCE_FILES = CommandInterface/CommandInterface.cpp \ Common/Main.cpp \ Common/MainHandler.cpp \ Common/ObjectHandler.cpp \ ...etc CPPUTEST_LIB_DIR = LocalTest/CppUTest/lib $(APP): $(BIN) $(CXX) -Wall -g -O2 -pthread -DGIT_REVISION=\"$(GIT_REVISION)\" -o $(BIN)$(APP) $(INCLUDE) $(SOURCE_FILES) -Wno-unknown-pragmas -L$(CPPUTEST_LIB_DIR) -lCppUTest -lCppUTestExt $(BIN): @mkdir -p $(BIN)
尝试执行./configure --host=arm-poky-linux-gnueabi-g++配置CppUTest交叉编译时,报错:
checking host system type... Invalid configuration `arm-poky-linux-gnueabi-g++': more than four components configure: error: /bin/bash ././config.sub arm-poky-linux-gnueabi-g++ failed
需解决:调整项目Makefile或CppUTest的Makefile,确保构建应用前自动用正确的交叉编译器编译CppUTest。
解决方案步骤
1. 修正CppUTest的configure命令
--host参数需传入目标架构的前缀,而非完整编译器命令。激活工具链后,环境变量已包含正确前缀,直接执行:
cd LocalTest/CppUTest ./configure --host=arm-poky-linux-gnueabi
激活工具链后,CC、CXX等环境变量会自动指向交叉编译器,configure会自动识别并使用这些变量。
2. 修改项目Makefile,添加CppUTest依赖
更新项目Makefile,让应用目标依赖CppUTest库,并添加自动编译CppUTest的规则:
CXX ?= g++ APP = stb BIN = bin/ GIT_REVISION := $(shell git describe --abbrev=10 --dirty --always) INCLUDE = -ICommandInterface -ICommon -IDataHandling -IFakeDevices -IHardwareInterface \ -ILocalTest -ILocalTest/Tests -ILocalTest/Tests/A7tests -ILocalTest/CppUTest/include SOURCE_FILES = CommandInterface/CommandInterface.cpp \ Common/Main.cpp \ Common/MainHandler.cpp \ Common/ObjectHandler.cpp \ ...etc CPPUTEST_DIR = LocalTest/CppUTest CPPUTEST_LIB_DIR = $(CPPUTEST_DIR)/lib # 定义CppUTest的目标库文件 CPPUTEST_LIBS = $(CPPUTEST_LIB_DIR)/libCppUTest.a $(CPPUTEST_LIB_DIR)/libCppUTestExt.a # 让应用目标依赖CppUTest库 $(APP): $(BIN) $(CPPUTEST_LIBS) $(CXX) -Wall -g -O2 -pthread -DGIT_REVISION=\"$(GIT_REVISION)\" -o $(BIN)$(APP) $(INCLUDE) $(SOURCE_FILES) -Wno-unknown-pragmas -L$(CPPUTEST_LIB_DIR) -lCppUTest -lCppUTestExt $(BIN): @mkdir -p $(BIN) # 添加自动编译CppUTest的规则 $(CPPUTEST_LIBS): cd $(CPPUTEST_DIR) && ./configure --host=arm-poky-linux-gnueabi && make # 可选:添加清理规则 clean: rm -rf $(BIN) cd $(CPPUTEST_DIR) && make clean
3. 验证编译流程
- 确保已激活交叉编译工具链:
source /opt/poky-bytesatwork/3.2.2/environment-setup-cortexa7t2hf-neon-vfpv4-poky-linux-gnueabi
- 执行
make命令,此时会先自动编译CppUTest库,再编译项目应用。
关键说明
- 激活工具链后,环境变量
CXX会被自动设置为交叉编译器arm-poky-linux-gnueabi-g++,因此项目Makefile中的CXX ?= g++会自动使用交叉编译器,无需手动修改。 - 如果CppUTest之前已配置过,需先执行
cd LocalTest/CppUTest && make distclean清理旧配置,再重新运行configure。
内容的提问来源于stack exchange,提问作者Jerry Hall
相关产品推荐
相关产品推荐

