Mik*_*ike 13 makefile conditional-compilation
我用伪代码捕获Makefile的意图,然后指出我遇到的问题.我正在寻找一个在测试环境中更加用户友好的Makefile.Makefile的正确用法如下所示.
make CATEGORY=parser TEST=basic.
make ALL
Run Code Online (Sandbox Code Playgroud)
如果用户给出"JUST"命令,如下所示,它应该打印一条消息"CATEGORY defined TEST undefined",反之亦然
make CATEGORY=parser
make TEST=basic
Run Code Online (Sandbox Code Playgroud)
我尝试以下列方式编写Makefile,但它出错了:
help:
echo"Usage: make CATEGORY=<advanced|basic> TEST=<test-case>
echo" make ALL
ifdef CATEGORY
ifdef TEST
CATEGORY_TEST_DEFINED = 1
else
echo "TEST not defined"
else
echo "CATEGORY not defined"
endif
ifeq ($(CATEGORY_TEST_DEFINED), 1)
$(CATEGORY):
cd $(PROJ)/$(CATEGORY)
make -f test.mk $(TEST)
endif
ifdef ALL
$(ALL):
for i in `ls`
cd $$(i)
make all
endif
Run Code Online (Sandbox Code Playgroud)
我的问题是:
Makefile中的规则是否可以选择性(使用ifdef选择规则和目标).
回声不起作用.echo应该帮助用户正确使用.
Bet*_*eta 20
问题是echo属于shell; Make可以在命令中将它传递给shell,但Make不能执行它.info改为使用:
ifdef CATEGORY
$(info CATEGORY defined)
else
$(info CATEGORY undefined)
endif
Run Code Online (Sandbox Code Playgroud)
如果您希望规则是有条件的:
ifdef CATEGORY
ifdef TEST
$(CATEGORY):
whatever
else
$(info TEST not defined)
else
$(info CATEGORY not defined)
endif
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63136 次 |
| 最近记录: |