make:*** [main.o]错误1

时间:2016-10-14 20:29:13

标签: gcc makefile

我正在执行一个包含3个部分的简单makefile,但它不能正常工作这些是我的文件的详细信息.h和.c:

  1. 的main.c

    #include <stdio.h>
    #include <stdlib.h>
    #include "hello.h"
    
    int main (void)
    {
         hello();
         return EXIT_SUCCESS;
    }
    
  2. hello.h

    #ifndef hello
        #define hello
        void hello (void);
    #endif
    
  3. 的hello.c

    #include <stdio.h>
    #include <stdlib.h>
    
    void hello (void)
    {
        printf("Hello World\n");
    }
    
  4. 生成文件

    all: hello
    hello: hello.o main.o
         gcc -o hello hello.o main.o
    
    hello.o: hello.c
         gcc -o hello.o -c hello.c -W -Wall -ansi -pedantic
    
    main.o: main.c hello.h
        gcc -o main.o -c main.c -W -Wall -ansi -pedantic
    
    clean:
         rm -rf *.o
    
     mrproper: clean
         rm -rf hello
    
  5. 我收到此错误:

    Image

2 个答案:

答案 0 :(得分:4)

当您编写#define hello时,您将hello定义为空令牌。因此,下一个字符串的函数声明实际上变为:

void (void);

这是无效的C代码。

您要做的可能是Include guard,其目的是避免多次包含一个标头。警卫的名称必须与您使用的任何其他令牌不同。通常的命名是FILENAME_H

#ifndef HELLO_H
#define HELLO_H
void hello(void);
#endif

答案 1 :(得分:1)

在hello.h第2行中,您将'hello'定义为空标记。删除该行。