diff options
| author | John Whittington <john@jbrengineering.co.uk> | 2017-06-04 10:47:04 +0100 |
|---|---|---|
| committer | John Whittington <john@jbrengineering.co.uk> | 2017-06-04 10:47:04 +0100 |
| commit | 81673d4666d417ab662c91fa093abefada7889e5 (patch) | |
| tree | 299269e57ca2c24f4261f33011257b2f06b7d6c6 | |
| parent | ba96840399381b35e20a9fe620602dc4a6fc6be7 (diff) | |
Support for generation of project tags file
Considering the number of project files spread in different locations
when developing an Arduino project, proper use of tags can be difficult;
resolving beyond local functions.
I've added automatic generation of a tags file, which includes:
* Standard ctags source in project dir (.c, .cpp, .h)
* Arduino source in project dir (.ide, .pde)
* Arduino core based on detected project core from Arduino install.
* Included Arduino libraries from user library folder.
As a Vim user I find this hugely useful and think it would be a useful
addtion for others. Target has been added as `make tags`.
| -rw-r--r-- | Arduino.mk | 32 | ||||
| -rw-r--r-- | HISTORY.md | 1 | ||||
| -rw-r--r-- | arduino-mk-vars.md | 52 |
3 files changed, 85 insertions, 0 deletions
@@ -1308,6 +1308,22 @@ $(OBJDIR)/%.sym: $(OBJDIR)/%.elf $(COMMON_DEPS) $(NM) --size-sort --demangle --reverse-sort --line-numbers $< > $@ ######################################################################## +# Ctags + +# Assume ctags is on path unless has been specified +ifndef CTAGS_EXEC + CTAGS_EXEC = ctags +endif + +# Default to 'tags' unless user has specified a tags file +ifndef TAGS_FILE + TAGS_FILE = tags +endif + +# ctags command: append file with user options before +CTAGS_CMD = $(CTAGS_EXEC) $(CTAGS_OPTS) -auf + +######################################################################## # Avrdude # If avrdude is installed separately, it can find its own config file @@ -1562,6 +1578,21 @@ generate_assembly: $(OBJDIR)/$(TARGET).s generated_assembly: generate_assembly @$(ECHO) "\"generated_assembly\" target is deprecated. Use \"generate_assembly\" target instead\n\n" +.PHONY: tags +tags: + rm -f $(shell pwd)/$(TAGS_FILE) + @$(ECHO) "Generating tags for source files: " + $(CTAGS_CMD) $(TAGS_FILE) $(shell find "`pwd`" -name "*.cpp" -o -name "*.h" -o -name "*.c") + @$(ECHO) "Generating tags for IDO an PDE files as C++: " + $(CTAGS_CMD) $(TAGS_FILE) --langmap=c++:.ino --langmap=c++:.pde $(shell find "`pwd`" -name "*.ino" -o -name "*.pde") + @$(ECHO) "Generating tags for project libraries: " + $(CTAGS_CMD) $(TAGS_FILE) $(foreach lib, $(ARDUINO_LIBS),$(USER_LIB_PATH)/$(lib)/*) + @$(ECHO) "Generating tags for Arduino core: " + $(CTAGS_CMD) $(TAGS_FILE) $(ARDUINO_CORE_PATH)/* + @$(ECHO) "Sorting..\n" + @sort $(TAGS_FILE) -o $(TAGS_FILE) + @$(ECHO) "Tag file generation complete, output: $(TAGS_FILE)" + help_vars: @$(CAT) $(ARDMK_DIR)/arduino-mk-vars.md @@ -1593,6 +1624,7 @@ help: generated assembly of the main sketch.\n\ make burn_bootloader - burn bootloader and fuses\n\ make set_fuses - set fuses without burning bootloader\n\ + make tags - generate tags file including project libs and Arduino core\n\ make help_vars - print all variables that can be overridden\n\ make help - show this help\n\ " @@ -13,6 +13,7 @@ I tried to give credit whenever possible. If I have missed anyone, kindly add it - New: Add support for good old cu as monitor command (issue #492) (https://github.com/mwm) - Tweak: Removed tilde from documentation (issue #497). (https://github.com/sej7278) - New: Add a documentation how to setup Makefile for 3rd party boards (issue #499). (https://github.com/MilanV) +- New: Add generation of tags file using ctags, which automatically includes project libs and Arduino core. (https://github.com/tuna-f1sh) ### 1.5.2 (2017-01-11) diff --git a/arduino-mk-vars.md b/arduino-mk-vars.md index 0df7a11..bef58bd 100644 --- a/arduino-mk-vars.md +++ b/arduino-mk-vars.md @@ -11,6 +11,7 @@ The following are the different variables that can be overwritten in the user ma * [Avrdude setting variables](#avrdude-setting-variables) * [Bootloader variables](#bootloader-variables) * [ChipKIT variables](#chipkit-variables) +* [Ctags variables](#ctags-variables) ## Global variables @@ -1402,6 +1403,57 @@ MPIDE_DIR = $(HOME)/mpide ---- +## Ctags variables + +### TAGS_FILE + +**Description:** + +Output file name for tags. Defaults to 'tags'. + +**Example:** + +```Makefile +TAGS_FILE = .tags +``` + +**Requirement:** *Optional* + +---- + +### CTAGS_OPTS + +**Description:** + +Additional options to pass to `ctags` command. + +**Example:** + +```Makefile +# Run ctags in verbose mode +CTAGS_OPTS = -V +``` + +**Requirement:** *Optional* + +---- + +### CTAGS_CMD + +**Description:** + +Location of `ctags` binary. Defaults to user path. + +**Example:** + +```Makefile +CTAGS_CMD = /usr/local/bin/ +``` + +**Requirement:** *Optional* + +---- + ### MPIDE_PREFERENCES_PATH **Description:** |
