makefile的小问题
时间:2011-01-23
来源:互联网
下面的makefile为什么可以正确执行? 我的疑问在这两行:
a:b
$(CC) -c $< $(CFLAGS)
为什么目标和依赖可以随便写?
我的环境是ubuntu 11.10, gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5),GNU Make 3.81
ad@ubuntu:~/pro/base$ l
base.c makefile
ad@ubuntu:~/pro/base$ cat base.c
#include <gtk/gtk.h>
int main(int argc,char * argv[])
{
GtkWidget * window;
gtk_init(&argc,&argv);
window =gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_show(window);
gtk_main();
return 0;
}
ad@ubuntu:~/pro/base$ cat makefile
# Target, compiler and objects.
EXEC = base
CC = gcc
OBJ = base.o
# Use for compile.
CFLAGS = `pkg-config --cflags gtk+-2.0`
# Use for link.
CLIBS = `pkg-config --libs gtk+-2.0`
$(EXEC): $(OBJ)
$(CC) -o $@ $^ $(CLIBS)
a:b
$(CC) -c $< $(CFLAGS)
.PHONY:clean
clean:
rm *.o
ad@ubuntu:~/pro/base$ make
gcc `pkg-config --cflags gtk+-2.0` -c -o base.o base.c
gcc -o base base.o `pkg-config --libs gtk+-2.0`
ad@ubuntu:~/pro/base$ l
base* base.c base.o makefile
ad@ubuntu:~/pro/base$ make clean
rm *.o
ad@ubuntu:~/pro/base$ l
base* base.c makefile
ad@ubuntu:~/pro/base$ ./base
^C
ad@ubuntu:~/pro/base$
多谢,我是linux开发新手。
a:b
$(CC) -c $< $(CFLAGS)
为什么目标和依赖可以随便写?
我的环境是ubuntu 11.10, gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5),GNU Make 3.81
ad@ubuntu:~/pro/base$ l
base.c makefile
ad@ubuntu:~/pro/base$ cat base.c
#include <gtk/gtk.h>
int main(int argc,char * argv[])
{
GtkWidget * window;
gtk_init(&argc,&argv);
window =gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_show(window);
gtk_main();
return 0;
}
ad@ubuntu:~/pro/base$ cat makefile
# Target, compiler and objects.
EXEC = base
CC = gcc
OBJ = base.o
# Use for compile.
CFLAGS = `pkg-config --cflags gtk+-2.0`
# Use for link.
CLIBS = `pkg-config --libs gtk+-2.0`
$(EXEC): $(OBJ)
$(CC) -o $@ $^ $(CLIBS)
a:b
$(CC) -c $< $(CFLAGS)
.PHONY:clean
clean:
rm *.o
ad@ubuntu:~/pro/base$ make
gcc `pkg-config --cflags gtk+-2.0` -c -o base.o base.c
gcc -o base base.o `pkg-config --libs gtk+-2.0`
ad@ubuntu:~/pro/base$ l
base* base.c base.o makefile
ad@ubuntu:~/pro/base$ make clean
rm *.o
ad@ubuntu:~/pro/base$ l
base* base.c makefile
ad@ubuntu:~/pro/base$ ./base
^C
ad@ubuntu:~/pro/base$
多谢,我是linux开发新手。
作者: dungeonsnd 发布时间: 2011-01-23
看上去那两句没有意义,你去掉就可以了
作者: guosha 发布时间: 2011-01-23
哦,不对,我看错了。为什么可以这么写我也不知道了,呵呵。
引用 1 楼 guosha 的回复:
看上去那两句没有意义,你去掉就可以了
看上去那两句没有意义,你去掉就可以了
作者: guosha 发布时间: 2011-01-23
引用 2 楼 guosha 的回复:
哦,不对,我看错了。为什么可以这么写我也不知道了,呵呵。
引用 1 楼 guosha 的回复:
看上去那两句没有意义,你去掉就可以了
哦,不对,我看错了。为什么可以这么写我也不知道了,呵呵。
引用 1 楼 guosha 的回复:
看上去那两句没有意义,你去掉就可以了
我测试发现,不管如何写都可以编译运行正确。
并且 make程序执行的编译命令是
a:b
$(CC) -c $< $(CFLAGS)
-----------------------------------------------------
gcc `pkg-config --cflags gtk+-2.0` -c -o base.o base.c
我把78页的陈皓的《跟我一起写makefile》仔细的查阅两遍(没细致从头到尾学),没发现这些,倒是明白 $<代表依赖项的第一个文件,也就是
a:b c
gcc -c $<
代表
gcc -c b
可为什么,顶楼中的makefile为什么不管a:b那行怎么写都可以? 我觉得不是 $< 的缘故吧? 难道能自动识别成 base.c?
作者: dungeonsnd 发布时间: 2011-01-23
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28