You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QMK编译Corne键盘keymap时出现隐式声明错误求助

Corne键盘自定义Keymap编译错误修复

问题描述

在Ubuntu下编译Corne键盘自定义keymap时,出现两个编译错误:

  • 函数SFT_L隐式声明
  • 初始化元素非常量

编译日志如下:

Compiling: quantum/keymap_introspection.c                                                          In file included from ./keyboards/crkbd/keymaps/CrisCL20/keymap.c:19:0,
                 from quantum/keymap_introspection.c:5:
./keyboards/crkbd/keymaps/CrisCL20/keymap.c:26:7: error: implicit declaration of function ‘SFT_L’ [-Werror=implicit-function-declaration]
       SFT_L(KC_ESC),    KC_A,    KC_S,    KC_D,  KC_F,KC_G,                         KC_H,    KC_J,    KC_K,    KC_L, KC_SCLN, KC_QUOT,
       ^
./.build/obj_crkbd_rev1_CrisCL20/src/default_keyboard.h:44:4: note: in definition of macro ‘LAYOUT_split_3x6_3’
   {k1A, k1B, k1C, k1D, k1E, k1F}, \
    ^
./keyboards/crkbd/keymaps/CrisCL20/keymap.c:26:7: error: initializer element is not constant
       SFT_L(KC_ESC),    KC_A,    KC_S,    KC_D,  KC_F,KC_G,                         KC_H,    KC_J,    KC_K,    KC_L, KC_SCLN, KC_QUOT,
       ^
./.build/obj_crkbd_rev1_CrisCL20/src/default_keyboard.h:44:4: note: in definition of macro ‘LAYOUT_split_3x6_3’
   {k1A, k1B, k1C, k1D, k1E, k1F}, \
    ^
./keyboards/crkbd/keymaps/CrisCL20/keymap.c:26:7: note: (near initialization for ‘keymaps[0][1][0]’)
       SFT_L(KC_ESC),    KC_A,    KC_S,    KC_D,  KC_F,KC_G,                         KC_H,    KC_J,    KC_K,    KC_L, KC_SCLN, KC_QUOT,
       ^
./.build/obj_crkbd_rev1_CrisCL20/src/default_keyboard.h:44:4: note: in definition of macro ‘LAYOUT_split_3x6_3’
   {k1A, k1B, k1C, k1D, k1E, k1F}, \
    ^
cc1: all warnings being treated as errors
 [ERRORS]

错误原因

SFT_L不是QMK固件的标准宏/函数,编译器无法识别该符号,导致隐式声明错误;同时未定义的函数调用不能作为数组的常量初始化元素,进而触发第二个错误。

修复方案

  1. 替换错误的按键宏:
    把SFT_L(KC_ESC)替换为QMK官方支持的左Shift一键双功能宏,二选一即可:

    • LSFT_T(KC_ESC):专门用于左Shift的Tap键(按住为左Shift,单击为ESC)
    • MT(MOD_LSFT, KC_ESC):通用修饰键Tap宏,效果和上面完全一致
  2. 重新编译:
    修改./keyboards/crkbd/keymaps/CrisCL20/keymap.c文件后,执行编译命令:

    make crkbd:rev1:CrisCL20
    

修改示例

修改后的对应按键行应为:

LSFT_T(KC_ESC),    KC_A,    KC_S,    KC_D,  KC_F,KC_G,                         KC_H,    KC_J,    KC_K,    KC_L, KC_SCLN, KC_QUOT,

内容的提问来源于stack exchange,提问作者user23300612

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 18:01:16