gpt4 book ai didi

makefile - 在GNU Make中使用ifeq和ifndef

转载 作者:行者123 更新时间:2023-12-02 11:23:20 26 4
gpt4 key购买 nike

我编写了一个相当简单的测试Makefile,其中定义了两个目标(全部和干净)。我有两个不同的条件语句。一个检查是否存在$(MAKECMDGOALS)特殊变量,另一个检查是否有任何命令行目标与变量(NODEPS)中列出的目标匹配。我遇到的问题是我的条件中的任何分支都没有执行。最终,我想使用一个条件来确定我提供的目标是否应该包括一些自动生成的依赖文件,但此刻我正在努力使任何一个表达式甚至都无法求值。我正在运行GNU make版本3.81,但我已经在Ubuntu和Mac OS X上尝试了它,但无济于事。

    NODEPS := clean
INCLUDE = $(filter $(NODEPS),$(MAKECMDGOALS))

.PHONY : all clean

ifndef $(MAKECMDGOALS)
@echo "$$(MAKECMDGOALS) is not defined"
else
@echo "$(MAKECMDGOALS) is defined"
endif

ifneq (0, $(words $(INCLUDE)))
@echo "INCLUDE = $(INCLUDE) != 0"
else
@echo "INCLUDE = $(INCLUDE) == 0"
endif


all :
@echo "all : $(MAKECMDGOALS)"

clean :
@echo "clean : $(MAKECMDGOALS)"

最佳答案

我最终设法找出问题所在。 @eriktous是正确的,指出我应该使用$(info)而不是@echo。不过,更巧妙的是,部分问题是我使用选项卡将@echo缩进了。看来,制表符是规则所必需的,但条件语句中是不允许的。另一个错误是,我应该在测试条件下扩展$(MAKECMDGOALS)变量,而该变量应该只写为ifndef MAKECMDGOALS

  • https://www.gnu.org/software/make/manual/html_node/Make-Control-Functions.html
  • 关于makefile - 在GNU Make中使用ifeq和ifndef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8071493/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com