CC=gcc sources=main.c list.c Timer_queue.c readinfo.c do_netcard.c do_route.c\ route.c rreq.c rrep.c rrer.c OBJS:=$(patsubst %.c,%.o,$(sources)) all:Multichannel %.d:%.c @set -e; rm -f $@;\ $(CC) -MM $< > $@.$$$$;\ sed 's,\($*\)\.o[ :]*,\1.o $@:,g'<$@.$$$$>$@;\ rm -f $@.$$$$ include $(sources:.c=.d) Multichannel:$(OBJS) $(CC) -lpthread -o Multichannel $(OBJS) .PHONY:clean clean...
由于目前做的这个项目中,基于makefile的一套东西做的不好,我需要把它带到正规上来,所以才有了时间来好好研究makefile这一块,其中关于自动产生头文件这一块感觉非常好,对项目帮助也非常大,我来剖析这一用法。 如果不用自动产生依赖,那么如下: main.c #include"a.h" int main(void){ printf("hello word,makefile\n"); return 0; } makefile 如下: all:main.o main.o:main.c a.h $(CC) $(CPPFLAGS) -o $@ ...
自动生成依赖性 在makefile中,我们的依赖关系可能会需要包含一系列的头文件,比如,如果我们的main.c中有一句“#i nclude "defs.h"”,那么我们的依赖关系应该是: main.o : main.c defs.h 但 是,如果是一个比较大型的工程,你必需清楚哪些C文件包含了哪些头文件,并且,你在加入或删除头文件时,也需要小心地修改makefile,这是一个很没 有维护性的工作。为了避免这种繁重而又容易出错的事情,我们可以使用C/C++编译...
阅读《GNU Make使用手册(中译版)》中的“4.12 自动生成依赖”一节,明白了一点:自动生成依赖是靠C/C++编译器来实现的。文中给出了一个格式规则: %.d: %.c set -e; $(CC) -M $(CPPFLAGS) $< \ | sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' > $@; \ [ -s $@ ] || rm -f $@ 此格式规则是用来生成%.c的依赖文件%.d,最关键的一句是第3行语句,sed是Linux的Shell命令。 Q: 以下是我的...
我在这里看到一个完整的例子 [code]all: main main: main.o stack.o maze.o gcc $^ -o $@ clean: -rm main *.o .PHONY: clean sources = main.c stack.c maze.c include $(sources:.c=.d) %.d: %.c set -e; rm -f $@; \ $(CC) -MM $(CPPFLAGS) $< > $@.$$$$; \ sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \ rm -f $@.$$$$s[/code] 我想问的是, 为什么既然在makefile里明确写明了 %.d: %.c, 又要用sed把 .d...
阅读《GNU Make使用手册(中译版)》中的“4.12 自动生成依赖”一节,明白了一点:自动生成依赖是靠C/C++编译器来实现的。文中给出了一个格式规则: %.d: %.c set -e; $(CC) -M $(CPPFLAGS) $< \ | sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' > $@; \ [ -s $@ ] || rm -f $@ 此格式规则是用来生成%.c的依赖文件%.d,最关键的一句是第3行语句,sed是Linux的Shell命令。 Q: 以下是我的...
本帖最后由 crazyhadoop 于 2011-12-01 17:43 编辑 最近要看一个开源软件,结果 makefile 使用 automake 生成的,但是这个我看起来有点吃力,请问大家在看开源软件的时候 ,是如何下手的?有没有什么好的方法 ?[code]pkgdatadir = $(datadir)/openpts pkgincludedir = $(includedir)/openpts pkglibdir = $(libdir)/openpts pkglibexecdir = $(libexecdir)/openpts am__cd = CDPATH="${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd...
第一段代码,文章里说是“模式规则”。然后,“模式规则”是个什么东西?这段模式规则是写在一个脚本里面,然后运行后就会生成.d文件吗?
本帖最后由 yshihyu 于 2011-09-30 17:02 编辑 书中范例代码有几百个文件夹 , 每个文件夹中又有 .c 与.h 文件 有办法写一支shell script 去每个文件夹中寻找.c 与 .h 之后在每个文件夹中自动生成对应的.c 与.h 所需要的 makefile? 谢谢
自动生成makefile文件并最终生成发布包需要一次执行下面几个命令: 1、autoscan ; 2、aclocal ; 3、autoconf ; 4、autoheader ; 5、automake ; 6、./configure ; 7、make ; 8、make install ; 9、make distcheck ; 10、make distclean ; 具体操作细节如下: 首先,要创建一个用来进行操作的目录,如:hello,并将源文件hello.c复制到这个目录下。 执行autoscan命令,hello目录下会生产configure.scan文件,将此文件名称改...