Makefile:如果检测到文件FAKE _ * .txt,则定义FAKE_ *

时间:2016-04-18 13:46:41

标签: makefile

我正在研究系统的一个部分,我必须欺骗一些我没有的测量(我没有完整的系统)。

在make文件中我添加了这个部分:

ifneq ("$(wildcard FAKE_FOO.txt)","")
    EndMessage += "WARNING : Version with FAKE_FOO"
    Info += FAKE_FOO
    CC_OPTS_APP += -DFAKE_FOO 
endif

ifneq ("$(wildcard FAKE_BAR.txt)","")
    EndMessage += "WARNING : Version with FAKE_BAR"
    Info += FAKE_BAR
    CC_OPTS_APP += -DFAKE_BAR 
endif

然后当make命令检测到文件FAKE_FOO.txt时,它定义为FAKE_FOO。当make命令检测到文件FAKE_BAR.txt时,它正在定义FAKE_BAR。 等...

在代码中我有这样的东西:

#ifdef FAKE_FOO
    /* do or define my stuff, for my case */
#else
    /* do or define the normal stuff for the rest of the team */
#endif

这非常好,所以我可以使用与我的团队相同的代码,我只需要创建文件FAKE * .txt。这些文件在忽略列表中,所以我肯定不会污染官方存储库。

我想避免每次使用另一个FAKE _ * .txt文件时编辑makefile。

如何将其置于通用模式,以便为每个FAKE _ * .txt文件定义FAKE_ *?

1 个答案:

答案 0 :(得分:1)

使用foreach功能和Canned Recipes

define do_fake
    # Need another $(eval) call here to set the bare variable immediately
    # so the expansions on the next lines work correctly.
    $(eval bare=$(1:.txt=))
    EndMessage += "WARNING : Version with $(bare)"
    Info += $(bare)
    CC_OPTS_APP += -D$(bare)
endef

# Loop over ever FAKE_*.txt file calling the do_fake canned
# recipe/macro/define for each file.
# Use $(eval) on the result so the macro can return make statements
# and so the make parser is happy. 
$(foreach f,$(wildcard FAKE_*.txt), $(eval $(call do_fake,$f)))