mark使目标不能直接调用

时间:2016-02-03 21:28:21

标签: makefile gnu-make

如何将目标标记为“不可取用”或“不直接调用此目标”?

例如,

common:
    touch $(VAR)  # VAR is expected to be set

foo: VAR = this
foo: common

bar: VAR = that
bar: common

我不希望用户执行以下操作:

make common


common标记为不可销售是否有成语?

3 个答案:

答案 0 :(得分:1)

您可以为“私人目标”使用特定的模式并检查该模式

以“ _”开头的目标似乎也未列出在自动完成功能中

ifeq ($(findstring _,$(MAKECMDGOALS)),_)
$(error target $(MAKECMDGOALS) is private)
endif

.PHONY: public-target
public-target: _private-target
public-target:
    echo "public target"

.PHONY: _private-target
_private-target:
    echo "private target"

答案 1 :(得分:0)

以下内容可行

ifeq ($(MAKECMDGOALS),common)
$(error do not call common directly)
endif

但是,对于像

这样的目标来说,编写ifeq ($(MAKECMDGOALS), ...)很困难
%-$(VERSION).tar:
     # create the final .tar file

答案 2 :(得分:0)

没有类似于.PHONY的东西可以通过命令行保持目标。你可以这样做:

common:
        $(if $(VAR),,$(error You must run 'make foo' or 'make bar'))
        touch $(VAR)