条件测试中的自动变量:GNU Make

发布于 2024-07-19 06:33:42 字数 535 浏览 7 评论 0原文

我有点被困在这里了。 我们有两个 makefile(我无法更改的要求)

  • defs.mk:它包含源文件名和文件名。 它们额外的编译标志(除了标准标志)例如:
C_FILES = c/src/main/rule_main.c
rule_main_OPTIONAL_FLAG = +w127
rule_main_DEBUG = TRUE
  • Makefile:它包含所有规则。

现在我想添加一个工具,以便我可以定义文件特定标志(以及可选的文件特定调试标志) 如:

CUSTOM_DEBUG_FLAG = $($(basename $(notdir $@))_DEBUG) ## rule_main_DEBUG macro from defs.mk
ifeq ($(CUSTOM_DEBUG_FLAG),TRUE)
  do something
endif

但这不起作用,因为条件中不支持自动变量的扩展。 还有其他方法吗?

I am kind of stuck here. We have two makefiles (A requirement that I can't change)

  • defs.mk: It contains the source file names & their extra compile flags (apart from the standard flags) e.g.:
C_FILES = c/src/main/rule_main.c
rule_main_OPTIONAL_FLAG = +w127
rule_main_DEBUG = TRUE
  • Makefile: It contains all the rules.

Now I want to add a facility so that I can define file specific flags (and optional file specific debug flag)
as in:

CUSTOM_DEBUG_FLAG = $($(basename $(notdir $@))_DEBUG) ## rule_main_DEBUG macro from defs.mk
ifeq ($(CUSTOM_DEBUG_FLAG),TRUE)
  do something
endif

But this is not working since expansion of automatic variables is not supported within conditionals. Is there any other way to do it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

香草可樂 2024-07-26 06:33:42

我通常利用 条件函数

SPECIFIC_FLAGS=$(if $(findstring $(CUSTOM_FLAG),TRUE),$(IF_TRUE),$(IF_FALSE))

或者使用 < a href="http://www.gnu.org/software/make/manual/make.html#Call-Function" rel="noreferrer">调用函数 定义我自己的函数:

debug_defs=$(if $(findstring $(1),file1 file2),-DDEBUG,-DNDEBUG)

%.o: src/$(notdir %).c
    @cc -c $(CFLAGS) $(call debug_defs,$(notdir $(basename $@))

I usually take advantage of conditional functions:

SPECIFIC_FLAGS=$(if $(findstring $(CUSTOM_FLAG),TRUE),$(IF_TRUE),$(IF_FALSE))

Or use call function to define my own function:

debug_defs=$(if $(findstring $(1),file1 file2),-DDEBUG,-DNDEBUG)

%.o: src/$(notdir %).c
    @cc -c $(CFLAGS) $(call debug_defs,$(notdir $(basename $@))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文