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固件的标准宏/函数,编译器无法识别该符号,导致隐式声明错误;同时未定义的函数调用不能作为数组的常量初始化元素,进而触发第二个错误。
修复方案
替换错误的按键宏:
把SFT_L(KC_ESC)替换为QMK官方支持的左Shift一键双功能宏,二选一即可:LSFT_T(KC_ESC):专门用于左Shift的Tap键(按住为左Shift,单击为ESC)MT(MOD_LSFT, KC_ESC):通用修饰键Tap宏,效果和上面完全一致
重新编译:
修改./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
相关产品推荐
相关产品推荐

