当前位置:  技术问答>linux和unix

关于makefile的初级应用

    来源: 互联网  发布时间:2017-05-08

    本文导语:  -----------------------------------makefile文件------------------------------ hello:hello.o fun1.o fun2.o gcc hello.o fun1.o fun2.o -o hello         #gcc $^ -o $@等同上句 fun1.o:fun1.h gcc fun1.h -o fun1.o fun2.o:fun2.h gcc $^ -o $@ hello.o:hello.c gcc hello.c -...

-----------------------------------makefile文件------------------------------
hello:hello.o fun1.o fun2.o
gcc hello.o fun1.o fun2.o -o hello
        #gcc $^ -o $@等同上句
fun1.o:fun1.h
gcc fun1.h -o fun1.o
fun2.o:fun2.h
gcc $^ -o $@
hello.o:hello.c
gcc hello.c -o $@

------------------------------------------fun1.h文件---------------------------------------

#include

void fun1()
{
 printf("成功调用函数文件1n");
}

--------------------------------------fun2.h文件------------------------------------
#include

void fun2()
{
  printf("成功调用函数文件2n");
}

-------------------------------hello.c文件---------------------------------
#include
#include"fun1.h"
#include"fun2.h"
int main()
{
  printf("主函数n");
  fun1();
  fun2();
  return 0;
}


这些文件都是在同一个文件夹下,在终端中执行make,为什么会出错?初学者,求指点

|

下面话可能比较多,不愿意看的话也随便了.
各位如果发现我说不对的地方,请务必指出.

首先:别在.h文件里实现啊.这根本就是给自己找麻烦啊.

看了你的提问觉得你可能在编译原理上不是很了解.

先搞清大概的编译流程.make只是按照你的思路自动化这个流程而已.如果流程都不妥.make基本很难正确啊.

首先,你如果不要make是这样编译的吗?

gcc fun1.h -o fun1.o

如果编译,一般是编译c文件. 头文件(.h)在预处理阶段结束后基本上就可以认为是没有了. 编译/汇编的话用 gcc -c
一个文件的工程的大致编译流程(图片看不清的话,请新标签打开大图):关于makefile的初级应用[图片]
至少大致清楚其中每种文件的意思.
对于你这个例子,我倾向于改成这样的文件结构.
关于makefile的初级应用[图片]
//fun1.h
void fun1(void);

//fun1.c
#include 
#include "fun1.h"
void fun1(void)
{
 printf("成功调用函数文件1n");
}

//fun2.h
void fun2(void);

//fun2.c
#include 
#include "fun2.h"
void fun2(void)
{
 printf("成功调用函数文件2n");
}

然后hello.c可以不变,不用hello.h (分出来也可以).

然后makefile.tab显示在代码中有问题.下面用4个空格代替了.
# makefile
# 即上边的"链接"过程
hello:hello.o fun1.o fun2.o
    gcc $^ -o $@ 

# 预处理,编译,汇编可以一步执行.当然也可以分步,只要了解编译的流程,这都不是问题.
# 默认make会推导出 gcc  -c  这样的规则.
# 即: gcc hello.c -c hello.o 所以可以省略,但推荐开始不太了解make的时候先写上.
hello.o:hello.c
    gcc $^ -c $@
fun1.o:fun1.c fun1.h
    gcc $^ -c $@
fun2.o:fun2.c fun2.h
    gcc $^ -c $@ 
# 以上还很更多的好的方式省略掉很多东西.但必须先确保自己足够了解make.(任重而道远呢)


手打的,可能有错误.但思路应该就是这样的.

路还很长,珍重



    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Makefile.in,Makefile.am,Makefile.bor应该怎么用?
  • makefile.am和makefile.in是什么文件,与makefile有什么联系吗?
  • 最近在学习linux C 看到了makefile部分,觉得makefile的语法很难理解,Makefile 的语法是不是shell语法?
  • 求解makefile问题,makefile.conf的作用?
  • 从网上载了个C++程序的源代码,包含38个.cpp和.h,还有makefile.in和makefile.am两个文件,但无configure和makefile.请问怎么编译?谢谢!
  • 有makefile.am,有 makefine.in 为什么就是没有Makefile?
  • makefile如何调用文件目录下的makefile
  • 请教根据Makefile.am自动生成Makefile的问题
  • 怎麼樣使Makefile.in生成Makefile?
  • 【急!】一个程序里有好多文件夹里都有Makefile,如何找到最管用的makefile
  • 【makefile使用】请问怎样在shell中获取makefile的最终目标?
  • unix下面make makefile文件,提示“makefile is up-to-date",怎么办呀?
  • Makefile使用遇到的问题!"Makefile:3:missing the separator.stop"在线等待.......
  • Makefile是如何输出执行的路径的,表示执行的是那个Makefile
  • 下的tar.gz源码里只有makefile.in和makefile.am
  • 一句 makefile 的解释 -- makefile 与 shel 结合
  • linux makefile error :Makefile:335: *** commands commence before first target。
  • [test@localhost ~]$ cat <makefile >catfile 跟cat > catfile <makefile是一样的吧?
  • 关于makfile,makefile.in, makefile.am. configure之间的关系
  • win32下编译Linux 下的项目(makefile.am和makefile.in)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,