使用.c = .o和$ <了解Makefile

 粉红色头发丫头_960 发布于 2022-12-18 19:44

这是我的第一个Makefile,我无法弄清楚使用的一些语法.问题标在下面

C := gcc

CFLAGS := -Wall -Werror -std=

PROG := program_1\
    program_2\
    program_3

SRCS := program_1.c \
    program_2.c \
    program_3.c

OBJS := ${SRCS:.c=.o} 

all: ${OBJS}
  ${CC} ${OBJS} -o ${PROG}

clean:
    rm -f ${PROG} ${OBJS}


.c.o:
    ${CC} ${CFLAGS} -c $<

    什么.c = .o是什么意思?在OBJS中:= $ {SRCS:.c = .o}

    不知道$

Mark Galeck.. 9

首先,你Makefile有一个bug,它没有达到预期的目标.你试过吗?

第二,写得不好; 不遵循最佳实践.

因此,我将首先向您展示Makefile的更好版本,无论是正确的,还是使用最佳实践编写的:

CFLAGS := -Wall -Werror -std=

SRCS := program_1.c \
    program_2.c \
    program_3.c

OBJS := ${SRCS:c=o} 
PROGS := ${SRCS:.c=}

.PHONY: all
all: ${PROGS}

${PROGS} : % : %.o Makefile
    ${CC} $< -o $@

clean:
    rm -f ${PROGS} ${OBJS}

%.o: %.c Makefile
    ${CC} ${CFLAGS} -c $<

现在,您的问题的答案是:

${SRCS:.c=.o}指,取所述变量值${SRCS},这是一个由空格分隔单词组成的字符串,并且对于每个字,替换后缀.c.o .我删除.了我的代码,因为它不需要,并且通常只在点后面替换后缀.

如果您熟悉该语法,则此语法类似于bash字符串后缀替换(对于一个单词).

$<当在"食谱"中使用时,意味着"第一个先决条件" - 在:上面的行之后的第一件事.

并且最后一个问题不再相关: .o.c语法已过时,目前不推荐.

请看看我的"十诫" - 我在这篇文章中的答案:

makefile强制库依赖顺序

,他们会给你一个关于最佳实践的想法.然后你也可以阅读GNU Make手册,关于引号中的上述术语,我在这里没有解释.

1 个回答
  • 首先,你Makefile有一个bug,它没有达到预期的目标.你试过吗?

    第二,写得不好; 不遵循最佳实践.

    因此,我将首先向您展示Makefile的更好版本,无论是正确的,还是使用最佳实践编写的:

    CFLAGS := -Wall -Werror -std=
    
    SRCS := program_1.c \
        program_2.c \
        program_3.c
    
    OBJS := ${SRCS:c=o} 
    PROGS := ${SRCS:.c=}
    
    .PHONY: all
    all: ${PROGS}
    
    ${PROGS} : % : %.o Makefile
        ${CC} $< -o $@
    
    clean:
        rm -f ${PROGS} ${OBJS}
    
    %.o: %.c Makefile
        ${CC} ${CFLAGS} -c $<
    

    现在,您的问题的答案是:

    ${SRCS:.c=.o}指,取所述变量值${SRCS},这是一个由空格分隔单词组成的字符串,并且对于每个字,替换后缀.c.o .我删除.了我的代码,因为它不需要,并且通常只在点后面替换后缀.

    如果您熟悉该语法,则此语法类似于bash字符串后缀替换(对于一个单词).

    $<当在"食谱"中使用时,意味着"第一个先决条件" - 在:上面的行之后的第一件事.

    并且最后一个问题不再相关: .o.c语法已过时,目前不推荐.

    请看看我的"十诫" - 我在这篇文章中的答案:

    makefile强制库依赖顺序

    ,他们会给你一个关于最佳实践的想法.然后你也可以阅读GNU Make手册,关于引号中的上述术语,我在这里没有解释.

    2022-12-18 19:47 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有