【问题标题】:parse file name and include inplaced mk files using GNU make使用 GNU make 解析文件名并包含已放置的 mk 文件
【发布时间】:2021-12-31 20:32:01
【问题描述】:

假设有一个目录/opt/dvp/gmake/,在这个目录下有三个文件:a.mka-b.mka-b-c.mk

澄清一下,在a-b-c.mk 中有特定程序、库等的定义和配置,我将其统称为工件。在a-b.mk 中有对a-b 组中所有工件的定义,在a.mk 中有对a 组中所有工件的定义。

我想在我调用make ARTIFACT=/opt/dvp/gmake/a-b-c.mk 的地方编写一个makefile,并在makefile 中自动调用-include /opt/dvp/gmake/a-b-c.mk-include /opt/dvp/gmake/a-b.mk-include /opt/dvp/gmake/a.mk

我查看了hereherehere,在 GNU Make documentantion,尝试了多种形式的 foreachcallshell 函数的组合,但我无法去做吧。

TIA

【问题讨论】:

  • 你还需要解决这个问题吗?
  • 谢谢,但现在不行了。我想我可以在我的问题上点击Delete,对吧?
  • 由于它不添加信息,我认为是的。如果您仍在使用 GNUmake,您可以查看 github.com/markpiffer/gmtt 以了解编程中的支持功能。例如,分析a-b-c 之类的字符串可以使用glob-match 来完成。
  • 我会看看gmtt。我会在几天后删除这个问题。

标签: parsing gnu-make


【解决方案1】:

我并没有真正了解程序等如何掌握 .mk 文件中的“细节”。也许在问题中添加规则示例会有所帮助。

一种方法可能是使用.而不是-作为分隔符,并使用basename逐个删除后缀:

# $ make foo.bar.baz
# foo.bar.baz
# foo.bar
# foo
%:
    @echo $@
    @echo $(basename $@)
    @echo $(basename $(basename $@))

对于您的文件(其他命名方案可以使其更漂亮):

-include $(ARTIFACT)

# remove .mk, then .c, then append .mk
-include $(basename $(basename $(ARTIFACT))).mk

# remove .mk, then .c, then .b, then append .mk
-include $(basename $(basename $(basename $(ARTIFACT)))).mk

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 2016-06-07
    • 1970-01-01
    相关资源
    最近更新 更多