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的命令里去。