C makefile中是否忽略扩展名?

C makefile中是否忽略扩展名?,c,makefile,C,Makefile,一个cube.c存储在文件夹cube中。makefile如下所示 LDFLAGS=-lglut -lGLU all: cube 有人能帮我解决以下问题吗 cube是指cube.c?为什么cube没有扩展名.c 行all:cube后没有命令,并且未使用LDFLAGES。为什么可以这样写呢 cube本身就是可执行文件。您的make可能有内置规则,用于将.c文件编译为.o文件(使用CFLAGS),以及将单个.o文件(使用LDFLAGS)链接到可执行文件。因此,您所要做的就是提供LDFLAGS,并

一个
cube.c
存储在文件夹cube中。makefile如下所示

LDFLAGS=-lglut -lGLU

all: cube
有人能帮我解决以下问题吗

  • cube
    是指cube.c?为什么
    cube
    没有扩展名
    .c

  • all:cube
    后没有命令,并且未使用
    LDFLAGES
    。为什么可以这样写呢


cube
本身就是可执行文件。您的
make
可能有内置规则,用于将
.c
文件编译为
.o
文件(使用
CFLAGS
),以及将单个
.o
文件(使用
LDFLAGS
)链接到可执行文件。因此,您所要做的就是提供
LDFLAGS
,并提供
make
至少一个目标,该目标通常称为
all

如果你明确写出
make
可以推断的规则,你会得到如下结果:

CC=cc
CFLAGS=
LDFLAGS=-lglut -lGLU

all: cube

cube: cube.o
    $(CC) $(LDFLAGS) cube cube.o

cube.o: cube.c
    $(CC) $(CFLAGS) -c cube.c
GNU Make手册有一节介绍其隐含规则:

cube的意思是cube.c?为什么多维数据集没有扩展名.c

它是生成的可执行文件的名称

在all:cube行之后没有命令,ldflags不是 用过

LDFLAGS
用于隐式规则

  • n、 o从n.c自动生成,其配方为
    $(CC)$(CPPFLAGS)$(CFLAGS)-c

  • 通过运行链接器(通常
    通过C编译器调用ld)。使用的精确配方是
    $(CC)$(LDFLAGS)n.o$(LOADLIBES)$(LDLIBS)


请参阅。

在哪里可以找到这些隐式规则?我读了一些教程,但它们都使用显式命令。