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