首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >makefile和c++项目

makefile和c++项目
EN

Stack Overflow用户
提问于 2011-04-27 13:34:47
回答 4查看 398关注 0票数 0

我写了一个非常简单的c代码,如下所示:

代码语言:javascript
复制
#include<stdio.h>
int sum(int x ,int y);
int mult(int x, int y);
int div(int x , int y);
int main()
{
    int a,b,s,m,d;
    system("clear");
     a =20;
     b =40;
    s=sum(a,b);
    m=mul(a,b);
    d=div(a,b);
    printf("\n the sum of given no. = %d\nThe product of given no. = %d\nThe division of given no = %d",s,m,d);
    return 0;
}

文件名为exp.c,然后我编写以下代码:

代码语言:javascript
复制
#include<stdio.h>
int sum( int x ,int y)
{
   int z;
   z=x+y;
   return z;
}

我将它保存为sum.c,然后编写以下代码:

代码语言:javascript
复制
#include<stdio.h>
int mult( int z ,int u)
{
   int v ;
   v=z*u;
   return v;
}

将它保存为mul.c,然后我编写以下代码

代码语言:javascript
复制
#include<stdio.h>
int div (int a, int b)
{ 
   int f;
   f=a/b;
   return f;
}

将其保存为div .c

我想使用所有文件作为一个单一的项目。我希望exp.c使用mul.c,div.c,sum.c中定义的函数。所以我写了一个makefile的项目,如下所示:

代码语言:javascript
复制
fun : exp.c
    gcc exp.c

exp.c : sum.o mul.o div.o

sum.o :sum.c
    gcc -c sum.c

mul.o :mul.c
    gcc -c product.c

div.o : div.c
    gcc -c div.c

现在我的问题是,我运行make命令,我得到了以下错误:

代码语言:javascript
复制
exp.c:(.text+0x31): undefined reference to `sum'
exp.c:(.text+0x43): undefined reference to `mult'

我哪里做错了?

我需要头文件吗?

没有头文件我该怎么做呢?

如何在没有make文件的情况下执行程序?

如何使用gcc-o sum.c mul.c,div.c命令来运行项目?请给我详细的描述

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-27 13:41:51

简单的方法:

代码语言:javascript
复制
fun:
    gcc -o fun exp.c sum.c div.c product.c

冗长的方式:

代码语言:javascript
复制
fun: exp.o sum.o mul.o div.o
    gcc -o fun exp.o sum.o mul.o div.o

%.o: %.c
    gcc -c $< -o $@

第二个方法神奇地接受任何.c文件,并将它们编译成正确的.o文件,这样就不需要为每个新文件创建新的目标。

票数 3
EN

Stack Overflow用户

发布于 2011-04-27 13:43:34

考虑到依赖关系,让我们回顾一下您的流程:

你告诉gcc把div,mul (.o).

  • You
  1. 编译成目标代码,告诉gcc把exp编译成二进制代码。

问题是,当您提供(1)中生成的对象文件(2)时,您并没有向gcc提供这些文件。您告诉它只编译exp。这就是函数链接失败的原因。

将所有内容编译成.o,然后使用所有生成的对象作为参数运行gcc,而不仅仅是主源文件。

票数 1
EN

Stack Overflow用户

发布于 2011-04-27 13:45:26

这是你程序的make文件

代码语言:javascript
复制
all: exp.c sum.o mul.o div.o
     gcc -o exp exp.c sum.o mul.o div.o
sum.o: sum.c
     gcc -o sum.o -c sum.c
mul.o: mul.c
     gcc -o mul.o -c mul.c
div.o: div.c
     gcc -o div.o -c div.c

在此之后,您必须通过执行命令来运行您的程序

代码语言:javascript
复制
make all
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5799820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档