bash - Make variable treated as command and ifeq-statement syntax error with parentheses -
i want create variable in makefile. compared in ifeq-statement. variable name treated command:
make: dif: command not found
i have:
dif := $(shell diff file1 <(./myprog < file2))
i've been reading manuals , testing, nothing worked. non-working effects of seen above.
edit:
made progress, second problem ifeq-statement
$(eval dif = diff ./test0.out <(./rozwiązanie < ./test0.in)) // ok ifeq ($(dif),null)
gives error:
ifeq (diff ./test0.out <(./rozwiązanie < ./test0.in),null) syntax error: word unexpected (expecting ")") makefile:18: recipe target 'test' failed
there many issues here. first, please specify operating system you're using , version of make; of above errors don't appear have been generated gnu make (which makefile syntax you're using) while others were. that's strange. please run make --version
, show output.
second, syntax you're using shell
function specific bash
shell, default gnu make (like versions of make) use posix sh
shell. output redirection syntax you're using there (<(./myprog <file2)
) not support in sh
. if must use non-standard, bash
-specific syntax you'll have invoke bash
directly; like:
dif := $(shell bash -c 'diff file1 <(./myprog <file2)')
third, use of eval
incorrect. eval
used expand makefile syntax, not shell syntax. statement:
$(eval dif = diff ./test0.out <(./rozwiązanie < ./test0.in))
is absolutely identical in every way statement:
dif = diff ./test0.out <(./rozwiązanie < ./test0.in)
so you're not running shell command @ all, you're setting variable dif
static string.
finally, output diff
never string null
, if-statement:
ifeq ($(dif),null)
will never true.
Comments
Post a Comment