请大家解释一下这个makefile文件

晚晨 2011-04-29 05:46:34
#----Define the User INCLUDE and LIB----
USER_INC=-I/usr/local/include -I/usr/include -I/usr/include/mysql -I/boli/pro/analysis_test/include
USER_LIB=-L/usr/lib64 -L/usr/local/lib64 -L/usr/lib64/mysql -lpfring -lpcap -lnet -lpthread -lz -lcrypt -lnsl -lm -lc -lnss_files -lnss_dns -lresolv -lc -lnss_files -lnss_dns -lresolv

#----Define the C Environment----
CC = g++
CFLAGS = -Wall -O2 -g

#----Define the Compile Environment----
.SUFFIXES: .o .cpp
.cpp.o: #请重点解释这一句
$(CC) $(CFLAGS) -c $< $(USER_INC) #请解释$<

#----Define the Application Code Control----
CSOURCE=PublicInfo.cpp \
netsniffer1.cpp

OBJS=$(CSOURCE:.cpp=.o)

all:$(OBJS)
$(CC) -o ../bin/netsniffer $^ $(USER_LIB)
@echo -en "\33[5m\33[1m========== Compile Success!! ==========\33[1m\33[0m\n\n"
clean:
rm *.o
...全文
52 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
super_admi 2011-04-29
  • 打赏
  • 举报
回复
.cpp.o: #请重点解释这一句
$(CC) $(CFLAGS) -c $< $(USER_INC) #请解释$<

上面表示:凡是把.cpp变成.o都需要使用下面的这条命令:

$(CC) $(CFLAGS) -c $< $(USER_INC)

(其中,$都要替换成具体的值)
老邓 2011-04-29
  • 打赏
  • 举报
回复
有点怀疑写Makefile的必要性了。
我现在用CMake,感觉爽极了!!
写完了CMakeLists.txt,各个平台、各个编译器下通杀!
bluesky12312388 2011-04-29
  • 打赏
  • 举报
回复
就是依赖推导
.SUFFIXES: .o .cpp
$(CC) $(CFLAGS) -c $< $(USER_INC) #请解释$<

可以解释为:
.SUFFIXES: 依赖.o .o又依赖.c
.o代表所有的o文件,相当于*.o 同理.c代表*.c

.cpp.o:
$(CC) $(CFLAGS) -c $< $(USER_INC) #请解释$<
就表示.cpp.o的生成依赖于下面的命令, $<就代表依赖的文件相当于 .c文件

还 $@就代表 *.o 依赖目标
一般是连着写的 Target: .o: .c
CC $CFLAGS -o $@ -c $<
昵称很不好取 2011-04-29
  • 打赏
  • 举报
回复
$<是makefile中的自动化变量,表示第一个依赖的目标,类似还有$@等
比如foo.o : foo.c
这里的foo.c就是$<

去看看跟我一起写makefile

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧