【问题标题】:Makefile eval function causing unexpected end of fileMakefile eval 函数导致文件意外结束
【发布时间】:2021-05-22 23:47:06
【问题描述】:

我正在尝试在规则中使用 eval 函数来增加 Makefile 变量(做一个花哨的加载栏),方法是

$(eval COUNTER=$(shell echo $$(($(COUNTER) + 1))))

我在互联网上发现这对某些人有用,但这一行导致我出现语法错误:文件意外结束,我应该怎么做才能增加我的计数器?这个函数有一些不可怕的替代品,或者有一种方法可以避免这种意外的文件结束吗?感谢您的帮助 这是我正在处理的整个 Makefile

SHELL =     /bin/sh
.SUFFIXES = .c .h .o

NAME =      Necklace

SRCD =      src
INCD =      inc
OBJD =      .obj

SRC =       $(addsuffix $(word 1, $(.SUFFIXES)),\
            main\
            necklace\
            utils)
INC =       $(addsuffix $(word 2, $(.SUFFIXES)),\
            necklace)
OBJ =       $(SRC:$(word 1, $(.SUFFIXES))=$(word 3, $(.SUFFIXES)))

CC =        gcc
CFLAGS =    -Wall\
            -Werror\
            -Wextra\
            -I $(INCD)

COUNT =     $(shell cat file.count 2>/dev/null)
COMPILED =  $(shell echo $$(($(shell ls src/*$(word 1, $(.SUFFIXES)) | wc -l | tr -d ' ') - $(COUNT))))

define set
set = $(eval $1 := $2)

ifeq ($(COUNT),)
all:
    echo $(words $(SRC)) > file.count && $(MAKE) -n | grep $(CC) | wc -l | tr -d ' ' > tmp.txt && rm -f file.count && echo $$(($$(cat tmp.txt) - 1)) > file.count && make
else
all:  $(NAME)
endif

$(NAME): $(addprefix $(OBJD)/, $(OBJ)) | $(addprefix $(INCD)/, $(INC))
    $(CC) $(CFLAGS) $^ -o $@

$(OBJD):
    mkdir $@

$(OBJD)/%.o: $(SRCD)/%.c | $(OBJD)
    @printf '\r\033[2KCompiling [' && sh prc.sh $(COMPILED) $(COUNT) && printf ']' && $(CC) $(CFLAGS) -c $< -o $@ && $(eval COMPILED:=$(shell echo $$(($(COMPILED) + 1)))) #Syntax Error is here

clean:
    rm -rf $(OBJD)

fclean: clean
    rm -rf $(NAME)

re: fclean all

【问题讨论】:

  • 您能否更清楚地解释您要完成的工作,并给出您的代码minimal complete example? (你以前被告知过。)
  • (我强烈怀疑问题是你试图在应该使用 shell 语法的地方使用 Make 语法,但我无法在没有上下文的情况下证明这一点。)
  • @Beta 我知道问题出在这个命令上,当我删除它时不会发生语法错误所以我认为给出整个makefile没用,我会更新帖子
  • 你想做的事都可以做到,但你需要一个非常不同的设计。规则中的 shell 命令对 Make 变量没有影响。

标签: makefile


【解决方案1】:

我设法通过将变量写入文件并将其读取到文件中而不是使用 Make 变量来做到这一点

【讨论】:

    猜你喜欢
    • 2017-05-17
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多