当前位置: 技术问答>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,为什么会出错?初学者,求指点
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
一个文件的工程的大致编译流程(图片看不清的话,请新标签打开大图):
至少大致清楚其中每种文件的意思.
对于你这个例子,我倾向于改成这样的文件结构.
//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.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。