MakeFile示例

时间:2014-02-03 20:49:40

标签: makefile

main.c:简单的'driver'程序,用于调用hello模块中的'sayHello()'函数。请注意,因为main.c不会调用任何标准I / O.     库函数,它不应该有#include stdio.h

hello.h:提供sayHello()函数的原型;别忘了     包括警卫

hello.c:实现sayHello()函数。这是唯一拥有的文件     #include stdio.h

这是我的Makefile :(没有'pack'部分)

hello: hello.o main.o
    gcc main.o hello.o -o hello
main.o: main.c hello.h
    gcc -c main.c -o main.o
hello.o: hello.c hello.h
    gcc -c hello.c -o hello.o
test: hello
    ./hello
clean:
    rm -f *.o hello

我的hello.c文件是:

#include<stdio.h>
#include "main.c"
int main()
{
    sayHello();
    return 0;
}

我的hello.h文件是:

void sayHello(void);

我的main.c文件是:

#include "hello.h"
void sayHello(void)
{
    puts("Hello,World!");
    return;
}

我做了一个测试,它显示“Hello,World!”。但是,当我再次运行它以防万一,有错误。有什么想法会发生什么?

2 个答案:

答案 0 :(得分:1)

hello.chello.h是某种类型的库。 hello.h向全世界提供sayHello()函数,此函数在hello.c中实现。这意味着hello.c必须包含以下内容:

#include "hello.h"

#include <stdio.h>

main.c应该只有:

#include "hello.h"

我认为“警卫”应该是hello.h中的function prototype

void sayHello(void);

答案 1 :(得分:0)

你似乎在没有意识到的情况下提出了几个问题。

让我们逐一看一下。您的任务是创建一个项目,将调用函数的程序和函数的实现分离为单独的源代码片段。这就是为什么你对#include和包含文件的规范有限制的原因。还要求您生成Makefile以将各种源代码文件编译到单个程序中,并提供基本功能,例如将源代码压缩为zip文件或删除目标文件。该作业旨在使您熟悉模块化和自动化编译以及将功能分离为不同的部分。

如果你想学习编程,你可以做的最好的事情是投入一些精力来看简单的make文件和编译。我可以给你答案,但直到你尝试了一段时间才会这样。你会从失败的尝试中学到更多,而不是从答案中窥视。

简而言之,您必须首先创建源代码,弄清楚如何将sayHello函数和main函数分成两个不同的源文件,并通过include文件导出函数定义。第二个问题是make文件的设计,你的任务几乎指定了,你要做的就是学习make文件配置语言并将make worded规范重新编写为make格式。您将从搜索“makefile tutorial”和阅读第一批结果中受益。 ......我假设你想要学习所有这些,而不仅仅是得到没有工作的答案。尽管make文件可能很棘手,但好消息是,在这个级别上,它们非常简单。

PS试试这里:http://mrbook.org/tutorials/make/