2011-05-16 89 views
1

这是在C中,我通过Putty运行UNIX并希望创建一个Makefile。有人可以告诉我如何创建这个非常简单的makefile吗?

所以我有一个程序只在一个文件“recommender.c”中,我需要make一个makefile来创建一个名为recommender的可执行文件,使用all函数。我不知道怎么做的部分是我编译recommender.c使用行gcc recommender.c -std = gnu99 我不知道如何确保它也执行-std = gun99部分。请帮忙? :)

回答

4
CFLAGS=-std=gnu99 -Wall -Wextra -O3 

all: recommender 

recommender: recommender.o 

注意文件扩展名必须是.c如果有扩展.cpp它需要的CXXFLAGS代替CFLAGS

了一些解释:

make文件是基于依赖你可以看到你可以在make文件的顶部设置你的变量。然后当make程序被调用时,它将在当前目录中搜索Makefile

由于默认操作是all它将搜索所有规则。 当它找到all规则时,它将检查在这种情况下规则/文件需要哪些依赖项,以便它再次开始搜索规则,并且它发现它需要规则/文件recommender.o,但它现在找不到任何规则/文件是魔法发生的地方。

make足够聪明地知道.o(对象)文件是由.c或.cpp(源)文件制作的,现在它将开始搜索当前目录中的源文件。他通过用.c代替.o来做到这一点,如果它找到将用gcc编译器编译它的文件,如果它在哪里找到.cpp文件,它将用g ++编译器编译它。

所以现在我们知道了这一点,我们可以通过添加更多的对象文件作为依赖项来简单地将多个源文件添加到项目中。

现在你并不真的需要首先创建一个对象文件,因为你从一个源文件编译,你还可以删除recommender: recommender.o规则,并会尝试通过编译recommender.c.cpp

3

您创建recommender应用甚至不需要makefile; CFLAGS="-std=gnu99" make recommender应该“只是工作”。

+3

但是'Makefile'对于永远不会忘记'CFLAGS'是非常有帮助的。 :) – sarnold 2011-05-16 23:55:02

+0

不妨直接输入编译命令即可;你甚至不需要那么做。 – eriktous 2011-05-17 11:05:16

相关问题