当前位置: 技术问答>linux和unix
为什么编辑了Makefile后重新编译没有作用,麻烦高手看看啊。。
来源: 互联网 发布时间:2016-10-22
本文导语: 比如说我编译了一个hello.c #include int main() { printf("hellon"); return 0; } 以及Makefile文件 hello:hello.c gcc -o hello hello.c make过后可以输出,但是我想进行调试于是重新编译了Makefile文件: hello:hello.c ...
比如说我编译了一个hello.c
#include
int main()
{
printf("hellon");
return 0;
}
以及Makefile文件
hello:hello.c
gcc -o hello hello.c
make过后可以输出,但是我想进行调试于是重新编译了Makefile文件:
hello:hello.c
gcc -o -g hello hello.c
但是问题是make过后,gdb找不到输入文件,就是说编译Makefile没有起作用
要重新在命令行运行gcc -o -g hello hello.c或者一开始就在Makefile中gcc -o -g hello hello.c
请问这是怎么回事呢?不明白请高手指点指点,不胜感激!
#include
int main()
{
printf("hellon");
return 0;
}
以及Makefile文件
hello:hello.c
gcc -o hello hello.c
make过后可以输出,但是我想进行调试于是重新编译了Makefile文件:
hello:hello.c
gcc -o -g hello hello.c
但是问题是make过后,gdb找不到输入文件,就是说编译Makefile没有起作用
要重新在命令行运行gcc -o -g hello hello.c或者一开始就在Makefile中gcc -o -g hello hello.c
请问这是怎么回事呢?不明白请高手指点指点,不胜感激!
|
因为你写的Makefile文件中,默认的编译目标 hello 只依赖于 hello.c ,而不依赖于 Makefile,也就是只有在 hello.c 有更新时才重新编译,否则只提示 "is up to date.”
你可以先直接删除目标文件 或在Makefile中添加clean功能删除掉目标文件 或更新 hello.c 然后在执行make命令。或者将Makefile改成这样:
hello: Makefile hello.c
gcc -o -g hello hello.c
你可以先直接删除目标文件 或在Makefile中添加clean功能删除掉目标文件 或更新 hello.c 然后在执行make命令。或者将Makefile改成这样:
hello: Makefile hello.c
gcc -o -g hello hello.c
|
hello:hello.c 这一行的意思就是hello依赖于hello.c
虽然改了Makefile,但是hello.c的时间还是早于hello,所以make认为hello是最新结果,没必要重新编译。
先把hello删掉再make即可。
标准的做法是在Makefile里面写个clean
clean:
rm hello
虽然改了Makefile,但是hello.c的时间还是早于hello,所以make认为hello是最新结果,没必要重新编译。
先把hello删掉再make即可。
标准的做法是在Makefile里面写个clean
clean:
rm hello
|
使用 gcc -g -o hello hello.c