Search code examples
makefilegitignoreheredoc

Heredoc in a Makefile?


Is this possible at all and how?

Update: I need this because I create a file both from dynamic and static data.

Use case: I have a test directory. Each C file produces a test executable. With

SRCS = $(wildcard [a-z]*.c)

I can add new tests as needed and make will find the new tests, compile, run and valgrind them. I also use git. I would like .gitignoreto include the executables.

So there. How to create .gitignore and include static data, i.e. the files I want to be ignored (*.o and depend) and also the executables dynamically?


Solution

  • Another GNU Make solution.

    You can do it using the define and export commands as follows:

    define GITIGNOREDS
    *.o
    depend
    endef
    
    SRCS = $(wildcard [a-z]*.c)
    EXES = $(SRCS:.c=)
    
    
    export GITIGNOREDS
    .gitignore: $(SRCS)
        echo $(EXES) | sed 's/ /\n/g' > $@
        echo "$$GITIGNOREDS" >> $@
    

    You have to be careful of make expansions (i.e. $(x)) inside the define block though.