这是在C中,我正在通过Putty运行UNIX,并且想要创建一个Makefile。
所以我有一个程序只在一个文件“recommender.c”中,我需要创建一个makefile,使用all函数创建一个名为recommender的可执行文件。我不知道怎么做的部分是我使用行gcc recommender.c编译recommender.c -std = gnu99 我不知道如何确保它也是-std = gun99部分。请帮忙? :)
答案 0 :(得分:4)
CFLAGS=-std=gnu99 -Wall -Wextra -O3
all: recommender
recommender: recommender.o
请注意,如果文件扩展名的扩展名为.c
,那么文件扩展名必须为.cpp
,而CXXFLAGS
代替CFLAGS
一些解释:
make文件是基于依赖关系的,因为您可以看到您可以在make文件的顶部设置变量。然后,当调用make程序时,它将在当前目录中搜索Makefile
。
由于默认操作为all
,因此会搜索所有规则。
当它找到all
规则时,它将检查在这种情况下需要哪些依赖项recommender
规则/文件,以便它再次开始搜索规则,并发现它需要recommender.o
规则/文件,但它不会找到任何,现在这里是魔术发生的地方。
make
非常聪明,知道.o(对象)文件是从.c或.cpp(源)文件生成的,现在它将开始在当前目录中搜索源文件。他通过将.o
替换为.c
,如果它找到了它将使用gcc编译器编译它的文件,如果找到.cpp
文件,它将用g ++编译它编译器。
所以现在我们知道这可以通过添加更多的目标文件作为依赖项来简单地将多个源文件添加到项目中。
现在您不需要首先创建一个目标文件,因为您从一个源文件进行编译,您也可以删除recommender: recommender.o
规则,make将尝试通过编译来创建recommender
应用程序{ {1}}或recommender.c
答案 1 :(得分:3)
你甚至不需要makefile; CFLAGS="-std=gnu99" make recommender
应该“正常工作”。