One other small thing that may or may not be obvious: if your estimationkmer.py script fails (returns non-zero), you won't be notified (and ESTK will likely end up empty).
Paul, is there any chance of adding a different version of $(shell) that fails noisily if the given shell command returns non-zero? I often use this goofy function: # This function works almost exactly like the built-in shell command, except it # stops everything with an error if the shell command given as its argument # returns non-zero when executed. The other difference is that the output # is passed through the strip make function (the shell function strips # only the last trailing newline). In practice this doesn't matter much # since the output is usually collapsed by the surrounding make context # to the same result produced by strip. WARNING: don't try to nest calls # to this function. SHELL_CHECKED = \ $(strip \ $(if $(shell (($1) 1>/tmp/SC_so) || echo 'non-empty'), \ $(error shell command '$1' failed. Its stderr should be above \ somewhere. Its stdout is available for review in '/tmp/SC_so'), \ $(shell cat /tmp/SC_so))) Britton On Wed, Mar 25, 2015 at 3:55 AM, Paul Smith <psm...@gnu.org> wrote: > On Wed, 2015-03-25 at 02:54 -0700, guylobster wrote: >> this is the first time I do a makefile. >> But I block to assign the result of my python script to a variable of my >> makefile. >> The function works. Here the function and the result. >> >> *My makefile* >> G_SIZE=10 >> Quake: >> python estimationkmer.py $(G_SIZE) >> ESTK=$(python estimationkmer.py $(G_SIZE)) >> echo $(ESTK) > > You have three problems here: > > First you have to escape dollar signs which you want to be passed to the > shell: > > ESTK=$$(python estimationkmer.py $(G_SIZE)) > > (note the double "$$" here) to escape the "$" so make passes it to your > shell. > > The second problem is that make invokes every line of a recipe as a > separate shell script, so variables assigned in one line are lost before > the next line. If you want to set a shell variable and use it again you > have to put both commands in the same shell: > > ESTK=$$(python estimationkmer.py $(G_SIZE)) ; \ > echo $$ESTK > > Finally, note this is setting a SHELL variable. > > You can't set a MAKE variable from within a recipe, because recipes are > passed to the shell and run there. If you want to set a make variable > you have to do it outside of a recipe, using make's shell function: > > ESTK := $(shell python estimationkmer.py $(G_SIZE)) > > Quake: > echo $(ESTK) > > > _______________________________________________ > Help-make mailing list > Help-make@gnu.org > https://lists.gnu.org/mailman/listinfo/help-make _______________________________________________ Help-make mailing list Help-make@gnu.org https://lists.gnu.org/mailman/listinfo/help-make