# ctags-lang-make

## Random notes about tagging Make source code with Universal Ctags

Version: | 6.2.1
Manual group: | Universal Ctags
Manual section: | 7

# SYNOPSIS

ctags ... --languages=+Make ...
ctags ... --language-force=Make ...
ctags ... --map-Make=+([Mm]akefile) --map-Make=+(GNUmakefile) ...
ctags ... --map-Make=+.mak --map-Make=+.mk ...

# DESCRIPTION

This parser extracts macro and target definitions. It also extracts included files as references.

## Examples

"input.mak"

    -include base.mak

    SRC = hello.c

    all: hello
    hello: hello.o
    hello.o: hello.c
    $(CC) -c $(CFLAGS) $(CPPFLAGS) $<

"output.tags" with "--options=NONE --extras=+r --fields=+KlrE -o - input.mak"

System Message: WARNING/2 (`ctags-lang-make.7.rst`, line 42)

Cannot analyze code. No Pygments lexer found for "tags".

    .. code-block:: tags

       SRC  input.mak       /^SRC = hello.c$/;"     macro   language:Make   roles:def
       all  input.mak       /^all: hello$/;"        target  language:Make   roles:def
       base.mak     input.mak       /^-include base.mak$/;" makefile        language:Make   roles:optional  extras:reference
       hello        input.mak       /^hello: hello.o$/;"    target  language:Make   roles:def
       hello.o      input.mak       /^hello.o: hello.c$/;"  target  language:Make   roles:def

# EXTRACTING CPP MACRO DEFINTIONS DEFINED WITH -DFOO

With `-D` option in a C compiler like gcc, a programmer can define a macro outside C source files. The options appears on a Makefile frequently. For an example:

    CPPFLAGS = -DDEBUG

The Make parser has heuristics [DINMAKE] for extracting the macros defined with the option. With enabling `CppDef` extra, you can turn on the heuristics.

## Examples

"input.mak"

    -include base.mak

    CFLAGS = -g -O2
    CPPFLAGS = -DOUTPUT=stdout
    SRC = hello.c

    all: hello
    hello: hello.o
    hello.o: hello.c
    $(CC) -c $(CFLAGS) $(CPPFLAGS) $<

"output.tags" with "--options=NONE --extras-Make=+{CppDef} --fields=+KlE -o - input.mak"

System Message: WARNING/2 (`ctags-lang-make.7.rst`, line 85)

Cannot analyze code. No Pygments lexer found for "tags".

    .. code-block:: tags

       CFLAGS       input.mak       /^CFLAGS = -g -O2$/;"   macro   language:Make
       CPPFLAGS     input.mak       /^CPPFLAGS = -DOUTPUT=stdout$/;"        macro   language:Make
       OUTPUT       input.mak       /^CPPFLAGS = -DOUTPUT=stdout$/;"        macro   language:CPreProcessor  extras:CppDef
       SRC  input.mak       /^SRC = hello.c$/;"     macro   language:Make
       all  input.mak       /^all: hello$/;"        target  language:Make
       hello        input.mak       /^hello: hello.o$/;"    target  language:Make
       hello.o      input.mak       /^hello.o: hello.c$/;"  target  language:Make

# VERSIONS

## Change since "0.0"

- New extra `CppDef` [DINMAKE]

# SEE ALSO

ctags(1)

[DINMAKE] | (1, 2) CONFIG_X86_X32_ABI is not visible (defined in Makefile, not C or Kconfig) (https://github.com/bootlin/elixir/issues/221)