Makefile Basic
Makefile
使用Makefile管理软件流程,轻松便利,但有一些基本的语法,总是忘记,写此博文,给将来的好忘的我。 直接上干货:
ifndef TEST_MK
$(error enviornment variable TEST_MK should be set!)
endif
HHH?=1
ifeq ("$(HHH)","1")
INFO="HHH is 1 by default"
else
INFO="HHH is set to other value $(HHH)"
endif
compile: gen_test
ifeq ("$HHH","1")
INFO=$(INFO) perl test.pl
else
INFO=$(INFO) perl test.pl
endif
gen_test: clean
@echo "my \$$info = \$$ENV{'INFO'};print \"We get in perl: \$$info\\n\";print \"We can get TEST_MK!\\n\" if (defined \$$ENV{'TEST_MK'});" > test.pl
clean:
rm -rf test.pl
命令行输入:
setenv TEST_MK hello;make
结果是:
rm -rf test.pl
INFO="HHH is 1 by default" perl test.pl
We get in perl: HHH is 1 by default
We can get TEST_MK!
关键的点有下面几个:
- 对环境变量的判断,使用ifndef,同时用error来输出错误信息,并停止。
- 使用“?=”来设置default值,如果想在命令行对变量“HHH”赋值:
make HHH=2
- 判断变量值用ifeq
- 最重要的一点,Makefile和Perl天生八字不合,好好的“$”,在Makefile里要写成"\$$",我也是醉了。
- 一般的情况下,执行的命令都会显示出来,除非在前面加上“@”。
- “INFO=$(INFO) perl test.pl”表示的是,把环境变量INFO传到perl的命令里去。