1. 问题描述
目前C51单片机在国内使用最多的就是Keil环境, 然而Keil特别难用不说, 它还是商业软件
网上有很多尝试使用VS开发C51的文章, 但大多都是只用VS作为编辑器, 功能很局限
2. 目标
尝试使用VS创建CMake项目, 调用SDCC编译器进行编译
3. 解决方法
需要的工具
- 安装了使用C++的桌面开发功能并且包含了用于Windows的C++ CMake工具的Visual Studio
- 已加入环境变量的SDCC编译器
需要注意
- 因为使用的是SDCC编译器, 很多非标准C的语法与Keil内的写法不同, 需要先熟悉这些语法的SDCC标准, 如果需要单片机头文件的转换, 可以去GitHub上找转换程序的项目
工程创建步骤
- 创建一个CMake项目
- 打开这个CMake项目的设置页面
- 修改配置名称(不改也没关系, 不过默认的是x64看着很不舒服), 配置类型Release(C51单片机怎么Debug嘛…)
最重要的是CMake命令参数, 必须指定为-DCMAKE_SYSTEM_NAME=Generic -DCMAKE_C_COMPILER=sdcc
- 接下来点击右上角的编辑JSON, 删掉
inheritEnvironments
配置并保存(否则会出现多次定义了变量CMAKE_C_COMPILER的错误), 当然上一步配置的内容就在这里, 也可以在这里修改
- 现在回到我们的项目来, 新建
include
和src
目录, 在src
目录内再新建一个CMakeLists.txt
文件
- 修改项目根目录下的
CMakeLists.txt
文件(项目名自己修改)# 项目特定的逻辑 cmake_minimum_required(VERSION 3.8) # 项目名称 set(PROJECT_NAME "CMakeProject1") project(${PROJECT_NAME} C) # 这个C是必须的, 否则将会提示CXX编译器错误 # 头文件查找目录 include_directories(${PROJECT_SOURCE_DIR}/include) # 源码子目录 add_subdirectory(${PROJECT_SOURCE_DIR}/src)
- 修改
src
目录下的CMakeLists.txt
文件# 源码列表 # set(SRC_LIST "main.c") file(GLOB SRC_LIST *.c) # 将源代码添加到此项目的可执行文件。 add_executable (${PROJECT_NAME} ${SRC_LIST})
- 最后, 如果没有报错, 就可以生成二进制文件了, 生成的二进制文件是
项目根目录\out\build\配置名称\src\项目名称.ihx
- 再补充一下, 如果无法使用
ihx
文件, 可以使用SDCC中的工具packihx.exe
将它转换成hex
文件或使用makebin.exe
将它转换成bin
文件# 注意packihx的>是必须的 packihx CMakeProject1.ihx > CMakeProject1.hex makebin CMakeProject1.ihx CMakeProject1.bin