makefile失败 - 隐式规则编译一个目标文件但不编译其余文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了makefile失败 - 隐式规则编译一个目标文件但不编译其余文件相关的知识,希望对你有一定的参考价值。

Makefile没有正确使用隐式规则。我正在关注本指南here

这是我的makefile:

objects = main.o hello.o
hello : $(objects)
    cc -o hello $(objects)

hello.o : defs.h
main.o : defs.h hello.h

.PHONY : clean
clean :
    -rm hello $(objects)

我收到以下错误:

cc: error: main.o: No such file or directory

它创建了对象代码hello.o,但是没有为main.c做。如果我交换线和主要在上面,它将创建main.o但不是hello.o。

这是我的main.c文件:

#include "defs.h"
#include "hello.h"

int main(int argc, char** argv) {
   display_hello();
   return (EXIT_SUCCESS);
}

这是我的hello.c文件:

#include "defs.h"

void display_hello()
{
    printf("Hello!\n");
}

我的hello.h文件:

#ifndef HELLO_H
#define HELLO_H

#ifdef __cplusplus
extern "C" {
#endif

#ifdef __cplusplus
}
#endif

#endif /* HELLO_H */

void display_hello();

这是我的defs.h文件:

#ifndef DEFS_H
#define DEFS_H

#ifdef __cplusplus
extern "C" {
#endif

#ifdef __cplusplus
}
#endif

#endif /* DEFS_H */

#include <stdio.h>
#include <stdlib.h>
答案

对我来说工作正常,我创建文件为https://gist.github.com/boyvinall/f23420215707fa3e73e21c3f9a5ff22b

$ make
cc    -c -o main.o main.c
cc    -c -o hello.o hello.c
cc -o hello main.o hello.o

可能是像@Beta那样的make版本,但即使是旧版本的GNU make也应该可以正常使用。

否则,请确保使用制表符缩进makefile中的缩进,而不是空格。

以上是关于makefile失败 - 隐式规则编译一个目标文件但不编译其余文件的主要内容,如果未能解决你的问题,请参考以下文章

makefile(06)_隐式规则

Makefile没有针对目标的规则

makefile:隐式规则:相同的目标不同的先决条件

Makefile 将自身添加为目标

有没有办法定义全局 Makefile(隐式)规则?

makefile--隐式规则