📄 eval
字号:
# -*-perl-*-$description = "Test the eval function.";$details = "This is a test of the eval function in GNU make.This function will evaluate inline makefile syntax and incorporate theresults into its internal database.\n";open(MAKEFILE,"> $makefile");print MAKEFILE <<'EOF';define Y all:: ; @echo $AA A = BendefX = $(eval $(value Y))$(eval $(shell echo A = A))$(eval $(Y))$(eval A = C)$(eval $(X))EOFclose(MAKEFILE);&run_make_with_options($makefile, "", &get_logfile);# Create the answer to what should be produced by this Makefile$answer = "AA\nBA\n";&compare_output($answer,&get_logfile(1));# Test to make sure defining variables when we have extra scope pushed works# as expected.$makefile2 = &get_tmpfile;open(MAKEFILE,"> $makefile2");print MAKEFILE <<'EOF';VARS = A BVARSET = $(1) = $(2)$(foreach v,$(VARS),$(eval $(call VARSET,$v,$v)))all: ; @echo A = $(A) B = $(B)EOFclose(MAKEFILE);&run_make_with_options($makefile2, "", &get_logfile);# Create the answer to what should be produced by this Makefile$answer = "A = A B = B\n";&compare_output($answer,&get_logfile(1));# Test to make sure eval'ing inside conditionals works properly$makefile3 = &get_tmpfile;open(MAKEFILE,"> $makefile3");print MAKEFILE <<'EOF';FOO = fooall:: ; @echo itdefine Y all:: ; @echo workedendefifdef BAR$(eval $(Y))endifEOFclose(MAKEFILE);&run_make_with_options($makefile3, "", &get_logfile);$answer = "it\n";&compare_output($answer,&get_logfile(1));&run_make_with_options($makefile3, "BAR=1", &get_logfile);$answer = "it\nworked\n";&compare_output($answer,&get_logfile(1));# TEST very recursive invocation of eval$makefile3 = &get_tmpfile;open(MAKEFILE,"> $makefile3");print MAKEFILE <<'EOF';..9 := 0 1 2 3 4 5 6 7 8 9rev=$(eval res:=)$(foreach word,$1,$(eval res:=${word} ${res}))${res}a:=$(call rev,${..9})all: ; @echo '[$(a)]'EOFclose(MAKEFILE);&run_make_with_options($makefile3, "", &get_logfile);$answer = "[ 9 8 7 6 5 4 3 2 1 0 ]\n";&compare_output($answer,&get_logfile(1));# TEST eval with no filename context.# The trick here is that because EVAR is taken from the environment, it must# be evaluated before every command is invoked. Make sure that works, when# we have no file context for reading_file (bug # 6195)$makefile4 = &get_tmpfile;open(MAKEFILE,"> $makefile4");print MAKEFILE <<'EOF';EVAR = $(eval FOBAR = 1)all: ; @echo "OK"EOFclose(MAKEFILE);$extraENV{EVAR} = '1';&run_make_with_options($makefile4, "", &get_logfile);$answer = "OK\n";&compare_output($answer,&get_logfile(1));# Clean out previous information to allow new run_make_test() interface.# If we ever convert all the above to run_make_test() we can remove this line.$makefile = undef;# Test handling of backslashes in strings to be evaled.run_make_test('define FOOall: ; @echo hello \worldendef$(eval $(FOO))', '', 'hello world');run_make_test('define FOOall: ; @echo '."'".'he\llo'."'".' @echo worldendef$(eval $(FOO))', '', 'he\lloworld');# We don't allow new target/prerequisite relationships to be defined within a# command script, because these are evaluated after snap_deps() and that# causes lots of problems (like core dumps!)# See Savannah bug # 12124.run_make_test('deps: ; $(eval deps: foo)', '', '#MAKEFILE#:1: *** prerequisites cannot be defined in command scripts. Stop.', 512);1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -