如何使用makefile?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用makefile?相关的知识,希望对你有一定的参考价值。

我下载了一个spkt工具箱,其中FFt工具包里面有fft.c文件和_fft.c和一个makefile.am和一个makefile.in。
我用DEV-C++编译两个.c文件都不能编译成功,这行出了问题“ fprintf(stderr, " data sequence (%s) [stdin]\n", FORMAT);”错误原因是[Linker error]undefined reference to 'dgetmem'
[Linker error]undefined reference to 'WinMain@16'
Id returned 1 exit status
请问:如何使程序工作起来,或者如何使用makefile?

以hello_test.c文件为例
1.创建程序
在linux控制台界面下 ,输入vi hello_test.c,输入i进入编辑插入模式,输入代码如下:
#include <stdio.h>
int main(void)

printf("Hello,Word!/n");
return 0;


用gcc编译程序
输入命令:gcc hello_test.c
输入命令:ls
显示:a.out hello_test.c
输入命令:./a.out //执行程序
2.使用Makefile
(1)创建Makefile,在hello_test.c所在目录输入 vi Makefile
(2)输入Makefile内容。在vi插入模式下输入:
hello_test : hello_test.c
gcc -o hello_test hello_test.c //特别注意 gcc前面不是空格,而是tab间隔符,否则会出现makefile:2: *** 遗漏分隔符错误
clean :
rm -fr hello_test *.o *.core
(3)输入make,屏幕输出 gcc -o hello_test hello_test.c,表示编译已经通过。
生成 hello_test。
参考技术A make工具,只是一个批处理工具。如果只是使用makefile,那么只要有make.exe这个文件就可以了。
make工具会根据makefile里面的信息来编译程序。在makefile里面,一般指定了用什么编译器,用什么程序链接,以及需要那些库的支持,还有一些其它的设置。

如果你没有相应的编译工具和库的支持,make会出错的。所以,你必须要先弄清楚,你拿到的c程序,需要什么样的环境才能编译。一般来说,你看看它C头文件和makefile里面的信息就应该能知道。本回答被提问者采纳
参考技术B 出现这样的连接错误的话,可能是因为你的源文件里指定的这个函数所在的库文件不存在,或者那个库文件存在但却不是为你的电脑的cpu结构build的。如果你确定你有那个库文件,那么你需要在连接的时候告诉连接器你需要依赖这个库文件,并且把路径告诉它。如果还不成功的话,那么就可能是你需要合适的cpu结构的那个相同的库文件,就是amd64,itanium,x86之类的。 参考技术C makefile
就是告诉make程序怎么编译文件。比如说要生成可执行程序my_exe.exe.该程序需要三个文件a1.c
a2.c

a3.c
那么你的makefile文件就可以写为
my_exe.exe:
a1.o
a2.o
a3.o
ld
-o
my_exe.exe
a1.o
a2.o
a3.o
%.o
:
%.c
cc
-o
$@
$<
第一段是说我要生成文件my_exe.exe需要三个.o文件;要是都有就会执行下面的链接命令;;;如果有的.o不存在就会执行下面那段代码。下面的意思是一个.o文件依赖于与它同名的。c要是这个.c文件存在,则编译并成.o,若还不存在就会报错
参考技术D 怎么执行呢
比如我是一个10.c和ghl.h的文件,10.c里有程序;
edit:10.c
ghl.h
gcc
-o
edit
10.c
clean:
rm
edit
10.o
修改makefile文件,注意gcc之前是一个tab键
然后make,就会在当前目录下会生成edit可执行文件,
./edit
即可执行

以上是关于如何使用makefile?的主要内容,如果未能解决你的问题,请参考以下文章

如何制作一个makefile文件

如何使用 makefile 使用 Visual Studio 编译代码

如何在linux下写makefile

如何在makefile(nmake使用的makefile)中加入依赖文件的搜索路径(依赖文件不在当前目录)

如何在makefile中使用cflow?

如何从文件中写入/读取变量并使用 Makefile 进行解析?