vscode+makefile开发STM32---支持C++开发

vscode+makefile开发STM32—支持C++开发

参考文章:https://zhuanlan.zhihu.com/p/468568448
修改Makefile文件

  1. 增加CXX_SOURCES变量指定C++源文件
CXX_SOURCES = \
APP/app.cpp
  1. 添加CXX变量指定g++编译器
CXX = $(GCC_PATH)/$(PREFIX)g++

CXX = $(PREFIX)g++
  1. 将CFlAGS复制一份改名为CXXFLAGS作为C++编译参数
CXXFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
CXXFLAGS += -g -gdwarf-2
CXXFLAGS += -MMD -MP -MF"$(@:%.o=%.d)"

  1. LDFLAGS链接参数中增加-specs=nosys.specs参数
LDFLAGS = $(MCU) -specs=nano.specs -specs=nosys.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections

链接选项中必须增加该参数,否则其它编译都正常,在链接的时候也会报错
5. 增加C++的编译方法:

OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(CXX_SOURCES:.cpp=.o)))
vpath %.cpp $(sort $(dir $(CXX_SOURCES)))

$(BUILD_DIR)/%.o: %.cpp Makefile | $(BUILD_DIR) 
	$(CXX) -c $(CXXFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.cpp=.lst)) $< -o $@
  1. 将最终的连接用到的编译器由CC改为CXX
$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile
	$(CXX) $(OBJECTS) $(LDFLAGS) -o $@
	$(SZ) $@

这里的CC不修改为CXX可能会出现如下报错

undefined reference to `operator delete(void*, unsigned int)

至此便完成了makefile文件的修改,便可以进行C++文件的编译了。

注意:一般在嵌入式应用C++编程基本都是C++和C进行混编的。C函数和CPP函数一定要区分清楚,同一个函数c编译出来和CPP编译出来的名称是不一样的。
一般来说C对应头文件中可以增加如下预编译指令,指定中间内容按照C格式编译。

#ifdef __cplusplus
extern "C" {
#endif

void Main(void);

#ifdef __cplusplus
}
#endif
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值