标签:
一、源码编译
1、源码下载
2、本人linux版本 Ubuntu 14.04 (GUN/Linux 3.13.0-0-32-generic x86_64)
3、前提准备
$sudo apt-get install gcc
$sudo apt-get install libbsd-dev
$cd apue.3e
make
..等待编译完成
二、实例随笔
1、作者Makefile
以第一章第一个ls为例(apue.3e/intro/ls1.c)
第一个Makefile(apue.3e/Makefile)
1 # 要遍历的文件夹 2 DIRS = lib intro sockets advio daemons datafiles db environ 3 fileio filedir ipc1 ipc2 proc pty relation signals standards 4 stdio termios threadctl threads printer exercises 5 # for循环,若想要连续遍历用$$i 6 all: 7 for i in $(DIRS); do 8 (cd $$i && echo "making $$i" && $(MAKE) ) || exit 1; 9 done 10 11 clean: 12 for i in $(DIRS); do 13 (cd $$i && echo "cleaning $$i" && $(MAKE) clean) || exit 1; 14 done
第二个Makefile(apue.3e/intro/Makefile)
1 ROOT=.. 2 # 执行apue.3e/systype.sh 3 PLATFORM=$(shell $(ROOT)/systype.sh) 4 # 引入基本量 5 include $(ROOT)/Make.defines.$(PLATFORM) 6 # 需要编译的文件 7 PROGS = getcputc hello ls1 mycat shell1 shell2 testerror uidgid 8 9 all: $(PROGS) 10 # 执行gcc命令,相应的量的值在Make.defines.xxx文件中,@表示依赖文件 11 %: %.c $(LIBAPUE) 12 $(CC) $(CFLAGS) $@.c -o $@ $(LDFLAGS) $(LDLIBS) 13 14 clean: 15 rm -f $(PROGS) $(TEMPFILES) *.o 16 #引入apue.3e/Make.libapue.inc文件 17 include $(ROOT)/Make.libapue.inc
Make.defines.linux(因为本人的平台是linux)
# Common make definitions, customized for each platform # Definitions required in all program directories to compile and link # C programs using gcc. CC=gcc COMPILE.c=$(CC) $(CFLAGS) $(CPPFLAGS) -c LINK.c=$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) LDFLAGS= LDDIR=-L$(ROOT)/lib LDLIBS=$(LDDIR) -lapue $(EXTRALIBS) # -ansi ansi C标准 # -I将后面表示的目录作为第一个寻找头文件的目录,顺序为:(ROOT)/include->/usr/include->/usr/local/include # -Wall 显示所有警告信息 # -D gcc中进行宏定义 # gcc命令中 -L将后面表示的目录作为第一个寻找库文件的目录,顺序为:(ROOT)/lib->/lib->/usr/lib->/usr/local/lib CFLAGS=-ansi -I$(ROOT)/include -Wall -DLINUX -D_GNU_SOURCE $(EXTRA) RANLIB=echo AR=ar AWK=awk LIBAPUE=$(ROOT)/lib/libapue.a # Common temp files to delete from each directory. TEMPFILES=core core.* *.o temp.* *.out
2、在自建工作目录中完成代码
把基本代码复制到自己的目录(myapue)
建立第一章代码目录
$mkdir ch1
$cd ch1
再把apue.3e的Makefile复制到ch1中,删除掉PROGS中需要遍历的值,以便添加自己新建的文件
第一个例子:vim myls.c
/*注释随笔*/ //DIR: struct __dirstream { void *__fd; char *__data; int __entry_data; char *__ptr; int __entry_ptr; size_t __allocation; size_t __size; __libc_lock_define (, __lock) }; typedef struct __dirstream DIR; //dirent <dirent.h> struct dirent{ long d_ino; /* inode number */ off_t d_off; /* offset to this dirent */ unsigned short d_reclen; /* length of this d_name */ char d_name [NAME_MAX+1]; /* file name (null-terminated) */ }
保存退出后,在吗Makefile的PROGS中添加 myls(PROGS = myls)
$make
./myls /home 可列出/home目录下的文件
<...夜深了...未完待续...>
标签:
原文地址:http://www.cnblogs.com/emrick/p/4960720.html