keyboard stuff
1# QMK CLI Commands
2
3# User Commands
4
5## `qmk compile`
6
7This command allows you to compile firmware from any directory. You can compile JSON exports from <https://config.qmk.fm>, compile keymaps in the repo, or compile the keyboard in the current working directory.
8
9This command is directory aware. It will automatically fill in KEYBOARD and/or KEYMAP if you are in a keyboard or keymap directory.
10
11**Usage for Configurator Exports**:
12
13```
14qmk compile [-c] <configuratorExport.json>
15```
16
17**Usage for Keymaps**:
18
19```
20qmk compile [-c] [-e <var>=<value>] [-j <num_jobs>] [--compiledb] -kb <keyboard> -km <keymap>
21```
22
23**Usage in Keyboard Directory**:
24
25Must be in keyboard directory with a default keymap, or in keymap directory for keyboard, or supply one with `--keymap <keymap>`
26```
27qmk compile
28```
29
30**Usage for building all keyboards that support a specific keymap**:
31
32```
33qmk compile -kb all -km <keymap>
34```
35
36**Example**:
37```
38$ qmk config compile.keymap=default
39$ cd ~/qmk_firmware/keyboards/planck/rev6
40$ qmk compile
41Ψ Compiling keymap with make planck/rev6:default
42...
43```
44or with optional keymap argument
45
46```
47$ cd ~/qmk_firmware/keyboards/clueboard/66/rev4
48$ qmk compile -km 66_iso
49Ψ Compiling keymap with make clueboard/66/rev4:66_iso
50...
51```
52or in keymap directory
53
54```
55$ cd ~/qmk_firmware/keyboards/gh60/satan/keymaps/colemak
56$ qmk compile
57Ψ Compiling keymap with make gh60/satan:colemak
58...
59```
60
61**Usage in Layout Directory**:
62
63Must be under `qmk_firmware/layouts/`, and in a keymap folder.
64```
65qmk compile -kb <keyboard>
66```
67
68**Example**:
69```
70$ cd ~/qmk_firmware/layouts/community/60_ansi/mechmerlin-ansi
71$ qmk compile -kb dz60
72Ψ Compiling keymap with make dz60:mechmerlin-ansi
73...
74```
75
76**Parallel Compilation**:
77
78It is possible to speed up compilation by adding the `-j`/`--parallel` flag.
79```
80qmk compile -j <num_jobs> -kb <keyboard>
81```
82The `num_jobs` argument determines the maximum number of jobs that can be used. Setting it to zero will enable parallel compilation without limiting the maximum number of jobs.
83```
84qmk compile -j 0 -kb <keyboard>
85```
86
87**Compilation Database**:
88
89Creates a `compile_commands.json` file.
90
91Does your IDE/editor use a language server but doesn't _quite_ find all the necessary include files? Do you hate red squigglies? Do you wish your editor could figure out `#include QMK_KEYBOARD_H`? You might need a [compilation database](https://clang.llvm.org/docs/JSONCompilationDatabase.html)! Compiling using this argument can create this for you.
92
93**Example:**
94
95```
96$ cd ~/qmk_firmware/keyboards/gh60/satan/keymaps/colemak
97$ qmk compile --compiledb
98Ψ Making clean
99Ψ Gathering build instructions from make ........
100Ψ Found 63 compile commands
101Ψ Writing build database to /Users/you/src/qmk_firmware/compile_commands.json
102Ψ Compiling keymap with make ........
103... build log continues ...
104```
105
106## `qmk flash`
107
108This command is similar to `qmk compile`, but can also target a bootloader. The bootloader is optional, and is set to `:flash` by default. To specify a different bootloader, use `-bl <bootloader>`. Visit the [Flashing Firmware](flashing) guide for more details of the available bootloaders.
109
110This command is directory aware. It will automatically fill in KEYBOARD and/or KEYMAP if you are in a keyboard or keymap directory.
111
112This command can also flash binary firmware files (hex or bin) such as the ones produced by [Configurator](https://config.qmk.fm).
113
114**Usage for Configurator Exports**:
115
116```
117qmk flash [-bl <bootloader>] [-c] [-e <var>=<value>] [-j <num_jobs>] <configuratorExport.json>
118```
119
120**Usage for Keymaps**:
121
122```
123qmk flash -kb <keyboard> -km <keymap_name> [-bl <bootloader>] [-c] [-e <var>=<value>] [-j <num_jobs>]
124```
125
126**Usage for pre-compiled firmwares**:
127
128**Note**: The microcontroller needs to be specified (`-m` argument) for keyboards with the following bootloaders:
129* HalfKay
130* QMK HID
131* USBaspLoader
132
133ISP flashing is also supported with the following flashers and require the microcontroller to be specified:
134* USBasp
135* USBtinyISP
136
137```
138qmk flash [-m <microcontroller>] <compiledFirmware.[bin|hex]>
139```
140
141**Listing the Bootloaders**
142
143```
144qmk flash -b
145```
146
147## `qmk config`
148
149This command lets you configure the behavior of QMK. For the full `qmk config` documentation see [CLI Configuration](cli_configuration).
150
151**Usage**:
152
153```
154qmk config [-ro] [config_token1] [config_token2] [...] [config_tokenN]
155```
156
157## `qmk cd`
158
159This command opens a new shell in your `qmk_firmware` directory.
160
161Note that if you are already somewhere within `QMK_HOME` (for example, the `keyboards/` folder), nothing will happen.
162
163To exit out into the parent shell, simply type `exit`.
164
165**Usage**:
166
167```
168qmk cd
169```
170
171## `qmk find`
172
173This command allows for searching through keyboard/keymap targets, filtering by specific criteria. `info.json` and `rules.mk` files contribute to the search data, as well as keymap configurations, and the results can be filtered using "dotty" syntax matching the overall `info.json` file format.
174
175For example, one could search for all keyboards powered by the STM32F411 microcontroller:
176
177```
178qmk find -f 'processor==STM32F411'
179```
180
181The list can be further constrained by passing additional filter expressions:
182
183```
184qmk find -f 'processor==STM32F411' -f 'features.rgb_matrix==true'
185```
186
187The following filter expressions are supported:
188
189 - `key == value`: Match targets where `key` is equal to `value`. May include wildcards such as `*` and `?`.
190 - `key != value`: Match targets where `key` is not `value`. May include wildcards such as `*` and `?`.
191 - `key < value`: Match targets where `key` is a number less than `value`.
192 - `key > value`: Match targets where `key` is a number greater than `value`.
193 - `key <= value`: Match targets where `key` is a number less than or equal to `value`.
194 - `key >= value`: Match targets where `key` is a number greater than or equal to `value`.
195 - `exists(key)`: Match targets where `key` is present.
196 - `absent(key)`: Match targets where `key` is not present.
197 - `contains(key, value)`: Match targets where `key` contains `value`. Can be used for strings, arrays and object keys.
198 - `length(key, value)`: Match targets where the length of `key` is `value`. Can be used for strings, arrays and objects.
199
200You can also list arbitrary values for each matched target with `--print`:
201
202```
203qmk find -f 'processor==STM32F411' -p 'keyboard_name' -p 'features.rgb_matrix'
204```
205
206**Usage**:
207
208```
209qmk find [-h] [-km KEYMAP] [-p PRINT] [-f FILTER]
210
211options:
212 -km KEYMAP, --keymap KEYMAP
213 The keymap name to build. Default is 'default'.
214 -p PRINT, --print PRINT
215 For each matched target, print the value of the supplied info.json key. May be passed multiple times.
216 -f FILTER, --filter FILTER
217 Filter the list of keyboards based on their info.json data. Accepts the formats key=value, function(key), or function(key,value), eg. 'features.rgblight=true'. Valid functions are 'absent', 'contains', 'exists' and 'length'. May be passed multiple times; all filters need to match. Value may include wildcards such as '*' and '?'.
218```
219
220## `qmk console`
221
222This command lets you connect to keyboard consoles to get debugging messages. It only works if your keyboard firmware has been compiled with `CONSOLE_ENABLE=yes`.
223
224**Usage**:
225
226```
227qmk console [-d <pid>:<vid>[:<index>]] [-l] [-n] [-t] [-w <seconds>]
228```
229
230**Examples**:
231
232Connect to all available keyboards and show their console messages:
233
234```
235qmk console
236```
237
238List all devices:
239
240```
241qmk console -l
242```
243
244Show only messages from clueboard/66/rev3 keyboards:
245
246```
247qmk console -d C1ED:2370
248```
249
250Show only messages from the second clueboard/66/rev3:
251
252```
253qmk console -d C1ED:2370:2
254```
255
256Show timestamps and VID:PID instead of names:
257
258```
259qmk console -n -t
260```
261
262Disable bootloader messages:
263
264```
265qmk console --no-bootloaders
266```
267
268## `qmk doctor`
269
270This command examines your environment and alerts you to potential build or flash problems. It can fix many of them if you want it to.
271
272**Usage**:
273
274```
275qmk doctor [-y] [-n]
276```
277
278**Examples**:
279
280Check your environment for problems and prompt to fix them:
281
282```
283qmk doctor
284```
285
286Check your environment and automatically fix any problems found:
287
288```
289qmk doctor -y
290```
291
292Check your environment and report problems only:
293
294```
295qmk doctor -n
296```
297
298## `qmk format-json`
299
300Formats a JSON file in a (mostly) human-friendly way. Will usually correctly detect the format of the JSON (info.json or keymap.json) but you can override this with `--format` if necessary.
301
302**Usage**:
303
304```
305qmk format-json [-f FORMAT] <json_file>
306```
307
308## `qmk info`
309
310Displays information about keyboards and keymaps in QMK. You can use this to get information about a keyboard, show the layouts, display the underlying key matrix, or to pretty-print JSON keymaps.
311
312**Usage**:
313
314```
315qmk info [-f FORMAT] [-m] [-l] [-km KEYMAP] [-kb KEYBOARD]
316```
317
318This command is directory aware. It will automatically fill in KEYBOARD and/or KEYMAP if you are in a keyboard or keymap directory.
319
320**Examples**:
321
322Show basic information for a keyboard:
323
324```
325qmk info -kb planck/rev5
326```
327
328Show the matrix for a keyboard:
329
330```
331qmk info -kb ergodox_ez -m
332```
333
334Show a JSON keymap for a keyboard:
335
336```
337qmk info -kb clueboard/california -km default
338```
339
340## `qmk json2c`
341
342Creates a keymap.c from a QMK Configurator export.
343
344**Usage**:
345
346```
347qmk json2c [-o OUTPUT] filename
348```
349
350## `qmk c2json`
351
352Creates a keymap.json from a keymap.c.
353
354**Note:** Parsing C source files is not easy, therefore this subcommand may not work with your keymap. In some cases not using the C pre-processor helps.
355
356**Usage**:
357
358```
359qmk c2json -km KEYMAP -kb KEYBOARD [-q] [--no-cpp] [-o OUTPUT] filename
360```
361
362**Examples**:
363
364```
365qmk c2json -km default -kb handwired/dactyl_promicro
366```
367
368or with filename:
369
370```
371qmk c2json keyboards/handwired/dactyl_promicro/keymaps/default/keymap.c
372```
373
374## `qmk lint`
375
376Checks over a keyboard and/or keymap and highlights common errors, problems, and anti-patterns.
377
378**Usage**:
379
380```
381qmk lint [-km KEYMAP] [-kb KEYBOARD] [--strict]
382```
383
384This command is directory aware. It will automatically fill in KEYBOARD and/or KEYMAP if you are in a keyboard or keymap directory.
385
386**Examples**:
387
388Do a basic lint check:
389
390```
391qmk lint -kb rominronin/katana60/rev2
392```
393
394## `qmk list-keyboards`
395
396This command lists all the keyboards currently defined in `qmk_firmware`
397
398**Usage**:
399
400```
401qmk list-keyboards
402```
403
404## `qmk list-keymaps`
405
406This command lists all the keymaps for a specified keyboard (and revision).
407
408This command is directory aware. It will automatically fill in KEYBOARD if you are in a keyboard directory.
409
410**Usage**:
411
412```
413qmk list-keymaps -kb planck/ez
414```
415
416## `qmk migrate`
417
418This command searches for legacy code that can be converted to the new `info.json` format and adds it to the specified keyboard's `info.json`.
419
420**Usage**:
421
422```
423qmk migrate [-h] -kb KEYBOARD [-f FILTER]
424```
425
426## `qmk new-keyboard`
427
428This command creates a new keyboard based on available templates.
429
430Any arguments that are not provided will prompt for input. If `-u` is not passed and `user.name` is set in .gitconfig, it will be used as the default username in the prompt.
431
432**Usage**:
433
434```
435qmk new-keyboard [-kb KEYBOARD] [-t {atmega32u4,STM32F303,etc}] [-l {60_ansi,75_iso,etc}] -u USERNAME
436```
437
438## `qmk new-keymap`
439
440This command creates a new keymap based on a keyboard's existing default keymap.
441
442This command is directory aware. It will automatically fill in KEYBOARD and/or KEYMAP if you are in a keyboard or keymap directory.
443
444**Usage**:
445
446```
447qmk new-keymap [-kb KEYBOARD] [-km KEYMAP]
448```
449
450## `qmk clean`
451
452This command cleans up the `.build` folder. If `--all` is passed, any .hex or .bin files present in the `qmk_firmware` directory will also be deleted.
453
454**Usage**:
455
456```
457qmk clean [-a]
458```
459
460## `qmk via2json`
461
462This command an generate a keymap.json from a VIA keymap backup. Both the layers and the macros are converted, enabling users to easily move away from a VIA-enabled firmware without writing any code or reimplementing their keymaps in QMK Configurator.
463
464**Usage**:
465
466```
467qmk via2json -kb KEYBOARD [-l LAYOUT] [-km KEYMAP] [-o OUTPUT] filename
468```
469
470**Example:**
471
472```
473$ qmk via2json -kb ai03/polaris -o polaris_keymap.json polaris_via_backup.json
474Ψ Wrote keymap to /home/you/qmk_firmware/polaris_keymap.json
475```
476
477## `qmk import-keyboard`
478
479This command imports a data-driven `info.json` keyboard into the repo.
480
481**Usage**:
482
483```
484usage: qmk import-keyboard [-h] filename
485```
486
487**Example:**
488
489```
490$ qmk import-keyboard ~/Downloads/forever60.json
491Ψ Importing forever60.json.
492
493Ψ Imported a new keyboard named forever60.
494Ψ To start working on things, `cd` into keyboards/forever60,
495Ψ or open the directory in your preferred text editor.
496Ψ And build with qmk compile -kb forever60 -km default.
497```
498
499## `qmk import-keymap`
500
501This command imports a data-driven `keymap.json` keymap into the repo.
502
503**Usage**:
504
505```
506usage: qmk import-keymap [-h] filename
507```
508
509**Example:**
510
511```
512qmk import-keymap ~/Downloads/asdf2.json
513Ψ Importing asdf2.json.
514
515Ψ Imported a new keymap named asdf2.
516Ψ To start working on things, `cd` into keyboards/takashicompany/dogtag/keymaps/asdf2,
517Ψ or open the directory in your preferred text editor.
518Ψ And build with qmk compile -kb takashicompany/dogtag -km asdf2.
519```
520
521## `qmk import-kbfirmware`
522
523This command creates a new keyboard based on a [Keyboard Firmware Builder](https://kbfirmware.com/) export.
524
525**Usage**:
526
527```
528usage: qmk import-kbfirmware [-h] filename
529```
530
531**Example:**
532
533```
534$ qmk import-kbfirmware ~/Downloads/gh62.json
535Ψ Importing gh62.json.
536
537⚠ Support here is basic - Consider using 'qmk new-keyboard' instead
538Ψ Imported a new keyboard named gh62.
539Ψ To start working on things, `cd` into keyboards/gh62,
540Ψ or open the directory in your preferred text editor.
541Ψ And build with qmk compile -kb gh62 -km default.
542```
543
544---
545
546# External Userspace Commands
547
548## `qmk userspace-add`
549
550This command adds a keyboard/keymap to the External Userspace build targets.
551
552**Usage**:
553
554```
555qmk userspace-add [-h] [-km KEYMAP] [-kb KEYBOARD] [builds ...]
556
557positional arguments:
558 builds List of builds in form <keyboard>:<keymap>, or path to a keymap JSON file.
559
560options:
561 -h, --help show this help message and exit
562 -km KEYMAP, --keymap KEYMAP
563 The keymap to build a firmware for. Ignored when a configurator export is supplied.
564 -kb KEYBOARD, --keyboard KEYBOARD
565 The keyboard to build a firmware for. Ignored when a configurator export is supplied.
566```
567
568**Example**:
569
570```
571$ qmk userspace-add -kb planck/rev6 -km default
572Ψ Added planck/rev6:default to userspace build targets
573Ψ Saved userspace file to /home/you/qmk_userspace/qmk.json
574```
575
576## `qmk userspace-remove`
577
578This command removes a keyboard/keymap from the External Userspace build targets.
579
580**Usage**:
581
582```
583qmk userspace-remove [-h] [-km KEYMAP] [-kb KEYBOARD] [builds ...]
584
585positional arguments:
586 builds List of builds in form <keyboard>:<keymap>, or path to a keymap JSON file.
587
588options:
589 -h, --help show this help message and exit
590 -km KEYMAP, --keymap KEYMAP
591 The keymap to build a firmware for. Ignored when a configurator export is supplied.
592 -kb KEYBOARD, --keyboard KEYBOARD
593 The keyboard to build a firmware for. Ignored when a configurator export is supplied.
594```
595
596**Example**:
597
598```
599$ qmk userspace-remove -kb planck/rev6 -km default
600Ψ Removed planck/rev6:default from userspace build targets
601Ψ Saved userspace file to /home/you/qmk_userspace/qmk.json
602```
603
604## `qmk userspace-list`
605
606This command lists the External Userspace build targets.
607
608**Usage**:
609
610```
611qmk userspace-list [-h] [-e]
612
613options:
614 -h, --help show this help message and exit
615 -e, --expand Expands any use of `all` for either keyboard or keymap.
616```
617
618**Example**:
619
620```
621$ qmk userspace-list
622Ψ Current userspace build targets:
623Ψ Keyboard: planck/rev6, keymap: you
624Ψ Keyboard: clueboard/66/rev3, keymap: you
625```
626
627## `qmk userspace-compile`
628
629This command compiles all the External Userspace build targets.
630
631**Usage**:
632
633```
634qmk userspace-compile [-h] [-e ENV] [-p] [-n] [-c] [-j PARALLEL] [-t]
635
636options:
637 -h, --help show this help message and exit
638 -e, --env ENV Set a variable to be passed to make. May be passed multiple times.
639 -p, --print-failures Print failed builds.
640 -n, --dry-run Don't actually build, just show the commands to be run.
641 -c, --clean Remove object files before compiling.
642 -j, --parallel PARALLEL
643 Set the number of parallel make jobs; 0 means unlimited.
644 -t, --no-temp Remove temporary files during build.
645```
646
647**Example**:
648
649```
650$ qmk userspace-compile
651Ψ Preparing target list...
652Build planck/rev6:you [OK]
653Build clueboard/66/rev3:you [OK]
654```
655
656## `qmk userspace-doctor`
657
658This command examines your environment and alerts you to potential problems related to External Userspace.
659
660**Example**:
661
662```
663% qmk userspace-doctor
664Ψ QMK home: /home/you/qmk_userspace/qmk_firmware
665Ψ Testing userspace candidate: /home/you/qmk_userspace -- Valid `qmk.json`
666Ψ QMK userspace: /home/you/qmk_userspace
667Ψ Userspace enabled: True
668```
669
670---
671
672# Developer Commands
673
674## `qmk format-text`
675
676This command formats text files to have proper line endings.
677
678Every text file in the repository needs to have Unix (LF) line ending.
679If you are working on **Windows**, you must ensure that line endings are corrected in order to get your PRs merged.
680
681```
682qmk format-text
683```
684
685## `qmk format-c`
686
687This command formats C code using clang-format.
688
689Run it with no arguments to format all core code that has been changed. Default checks `origin/master` with `git diff`, branch can be changed using `-b <branch_name>`
690
691Run it with `-a` to format all core code, or pass filenames on the command line to run it on specific files.
692
693**Usage for specified files**:
694
695```
696qmk format-c [file1] [file2] [...] [fileN]
697```
698
699**Usage for all core files**:
700
701```
702qmk format-c -a
703```
704
705**Usage for only changed files against origin/master**:
706
707```
708qmk format-c
709```
710
711**Usage for only changed files against branch_name**:
712
713```
714qmk format-c -b branch_name
715```
716
717## `qmk docs`
718
719This command starts a local HTTP server which you can use for browsing or improving the docs, and provides live reload capability whilst editing. Default port is 8936.
720Use the `-b`/`--browser` flag to automatically open the local webserver in your default browser.
721
722Requires `node` and `yarn` to be installed as prerequisites.
723
724**Usage**:
725
726```
727usage: qmk docs [-h] [-b] [-p PORT]
728
729options:
730 -h, --help show this help message and exit
731 -b, --browser Open the docs in the default browser.
732 -p, --port PORT Port number to use.
733```
734
735## `qmk generate-docs`
736
737This command generates QMK documentation for production.
738Use the `-s`/`--serve` flag to also serve the static site on port 4173 once built. Note that this does not provide live reloading; use `qmk docs` instead for development purposes.
739
740This command requires `node` and `yarn` to be installed as prerequisites, and requires the operating system to support symlinks.
741
742**Usage**:
743
744```
745usage: qmk generate-docs [-h] [-s]
746
747options:
748 -h, --help show this help message and exit
749 -s, --serve Serves the generated docs once built.
750```
751
752## `qmk generate-rgb-breathe-table`
753
754This command generates a lookup table (LUT) header file for the [RGB Lighting](features/rgblight) feature's breathing animation. Place this file in your keyboard or keymap directory as `rgblight_breathe_table.h` to override the default LUT in `quantum/rgblight/`.
755
756**Usage**:
757
758```
759qmk generate-rgb-breathe-table [-q] [-o OUTPUT] [-m MAX] [-c CENTER]
760```
761
762## `qmk kle2json`
763
764This command allows you to convert from raw KLE data to QMK Configurator JSON. It accepts either an absolute file path, or a file name in the current directory. By default it will not overwrite `info.json` if it is already present. Use the `-f` or `--force` flag to overwrite.
765
766**Usage**:
767
768```
769qmk kle2json [-f] <filename>
770```
771
772**Examples**:
773
774```
775$ qmk kle2json kle.txt
776☒ File info.json already exists, use -f or --force to overwrite.
777```
778
779```
780$ qmk kle2json -f kle.txt -f
781Ψ Wrote out to info.json
782```
783
784## `qmk format-python`
785
786This command formats python code in `qmk_firmware`.
787
788**Usage**:
789
790```
791qmk format-python
792```
793
794## `qmk pytest`
795
796This command runs the python test suite. If you make changes to python code you should ensure this runs successfully.
797
798**Usage**:
799
800```
801qmk pytest [-t TEST]
802```
803
804**Examples**:
805
806Run entire test suite:
807
808```
809qmk pytest
810```
811
812Run test group:
813
814```
815qmk pytest -t qmk.tests.test_cli_commands
816```
817
818Run single test:
819
820```
821qmk pytest -t qmk.tests.test_cli_commands.test_c2json
822qmk pytest -t qmk.tests.test_qmk_path
823```
824
825## `qmk painter-convert-graphics`
826
827This command converts images to a format usable by QMK, i.e. the QGF File Format. See the [Quantum Painter](quantum_painter#quantum-painter-cli) documentation for more information on this command.
828
829## `qmk painter-make-font-image`
830
831This command converts a TTF font to an intermediate format for editing, before converting to the QFF File Format. See the [Quantum Painter](quantum_painter#quantum-painter-cli) documentation for more information on this command.
832
833## `qmk painter-convert-font-image`
834
835This command converts an intermediate font image to the QFF File Format. See the [Quantum Painter](quantum_painter#quantum-painter-cli) documentation for more information on this command.
836
837## `qmk test-c`
838
839This command runs the C unit test suite. If you make changes to C code you should ensure this runs successfully.
840
841**Usage**:
842
843```
844qmk test-c [-h] [-t TEST] [-l] [-c] [-e ENV] [-j PARALLEL]
845
846options:
847 -h, --help show this help message and exit
848 -t TEST, --test TEST Test to run from the available list. Supports wildcard globs. May be passed multiple times.
849 -l, --list List available tests.
850 -c, --clean Remove object files before compiling.
851 -e ENV, --env ENV Set a variable to be passed to make. May be passed multiple times.
852 -j PARALLEL, --parallel PARALLEL
853 Set the number of parallel make jobs; 0 means unlimited.
854```
855
856**Examples**:
857
858Run entire test suite:
859
860```
861qmk test-c
862```
863
864List available tests:
865
866```
867qmk test-c --list
868```
869
870Run matching test:
871
872```
873qmk test-c --test unicode*
874```
875
876Run single test:
877
878```
879qmk test-c --test basic
880```
881
882## `qmk generate-compilation-database`
883
884**Usage**:
885
886```
887qmk generate-compilation-database [-kb KEYBOARD] [-km KEYMAP]
888```
889
890This command has been deprecated as it cannot take into account configurables such as [converters](/feature_converters) or environment variables normally specified on the command line; please use the `--compiledb` flag with `qmk compile` instead.