I'm having hard time writing a makefile rule that outputs a multiline variable in a file.
Here is the code I have :
define VAR1 /dev d 755 - - - - - endef define VAR2 /test d 777 - - - - - /test2 d 777 - - - - - endef VARS += $(VAR1) VARS += $(VAR2) all: echo "$(VARS)" > test
However, the echo fails telling "Unterminated quoted string" for a reason unknown to me. How could i put in the file every lines declared on a separate line ?
If you export the variable to the shell and reference it as a shell variable, rather than a make variable, you will have better luck:
define VAR1 /dev d 755 - - - - - endef define VAR2 /test d 777 - - - - - /test2 d 777 - - - - - endef define VARS $(VAR1) $(VAR2) endef export VARS all: echo "$$VARS" > test
Note the following adjustments to your makefile:
define
to create VARS
, rather than a series of +=
assignments, which makes it easier to get a newline between the value of VAR1
and VAR2
.export VARS
to your makefile, to get the variable pushed into the environment for the shell invocation.$$VARS
rather than $(VARS)
to dereference it -- that leaves the expansion to the shell, rather than to make, which will avoid the "Unterminated quoted string" error.GNU make 4.0 adds the ability to write files directly:
define VAR1 /dev d 755 - - - - - endef define VAR2 /test d 777 - - - - - /test2 d 777 - - - - - endef define VARS := $(VAR1) $(VAR2) endef all: $(file > test,$(VARS))
Note that you still need to use define
to define VARS
, or the last line of VAR1
and the first line of VAR2
will be glommed onto one line. Also, don't put a space after the comma in the $(file ...)
construct, or there will be a leading space in the output!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With