【问题标题】:make: *** No rule to make target `main.c', needed by `main.o'. Stopmake: *** 没有规则来制作目标“main.c”,这是“main.o”所需要的。停止
【发布时间】:2012-02-14 03:05:57
【问题描述】:

函数.h

#include<stdio.h>
void print_hello(void);
int factorial(int n);

main.c

#include<stdio.h>
#include<functions.h>
int main()
{
 print_hello();
 printf("\nThe factorial is: %d \n",factorial(5));
 return 0;
}

你好.c

#include<stdio.h>
#include<functions.h>
void print_hello()
{
 printf("\nHello World!\n");
}

factorial.c

#include<stdio.h>
#include<functions.h>
int factorial(int n)
{
 if(n!=1)
 {
  return(n*factorial(n-1));
 }
 else
  return 1;
}

制作文件

exec : \
 compile  
    echo "Executing the object file"
    ./compile 

compile : main.o hello.o factorial.o
    echo "Compiling"
    gcc -o compile $^

main.o : main.c functions.h
    gcc -c main.c -I./INCLUDE -I./SRC

hello.o : hello.c functions.h
    gcc -c hello.c -I./INCLUDE -I./SRC

factorial.o : factorial.c functions.h
    gcc -c factorial.c -I./INCLUDE -I./SRC

文件夹:make_example\INCLUDE\functions.h 文件夹: make_example\SRC\main.c 文件夹:make_example\SRC\hello.c 文件夹: make_example\SRC\factorial.c 文件夹:make_example\makefile

将 make 文件编译为“desktop:~/make_example$ make”时出现错误

make: * 没有规则来制作目标main.c', needed bymain.o'。停下来。”

请帮我理解这个错误的原因

【问题讨论】:

    标签: c unix gnu-make


    【解决方案1】:

    当您运行 make 时,它会尝试创建文件中的第一个目标 (exec),它依赖于 compile,它依赖于 main.o,它依赖于 main.c。没有文件main.c,只有SRC/main.c。没有规则可以创建一个名为main.c的文件,并且没有预先存在的main.c,所以make有错误并退出。

    You can fix thisVPATHvpath

    VPATH = SRC INCLUDE 
    

    【讨论】:

    • 谢谢 .. 我试过了,但它向我显示了这样的错误..gcc -s -c main.c SRC INCLUDE gcc: main.c: No such file or directory make: *** [main.o] 错误 1
    • 是否可以在不使用VPATH或vpath的情况下设置目录的路径。请帮助。
    • 与其寻求帮助,不如尝试分析问题。 make 找到了该文件,但 gcc 没有找到,所以您已经解决了一个错误并出现了下一个错误。您应该在编译器规则中使用$&lt; 而不是main.c
    【解决方案2】:

    您的 main.c 在子目录 src 中,而 make 不知道去那里看。有很多选项,其中最简单的方法是在 makefile 中写入“src/main.c”而不是“main.c”。您还可以将 main.c 移动一个级别,或者将 makefile 移动到 src/ 并在那里构建,或者将一个 makefile 放在 cds 到 src 并调用 make 的顶层(这是递归 make,许多人认为这是“有害的”,但在许多(大多数)情况下都很好。)您也可以使用 VPATH 指令,但如果您选择这样做,请注意这不适用于所有版本的 make。

    【讨论】:

      猜你喜欢
      • 2014-06-07
      • 1970-01-01
      • 2021-05-12
      • 1970-01-01
      • 1970-01-01
      • 2023-02-25
      • 2015-06-11
      • 1970-01-01
      • 2014-02-21
      相关资源
      最近更新 更多