文章分类 -  makefile

摘要:编译程序时放在符号表里的不光是内存地址和函数/变量的对应关系,还有很多在编译时要用到的信息。比如该节点的各种属性(类型,作用域,分配空间大小,(函数)的参数类型)等等。符号表与编译的各个阶段都有交互。对符号表的具体使用方法每个编译器都不同。 目标文件中的符号表用来输出函数/变量符号信息,供连接时给其他模块引用。这种符号表中主要包含函数/变量的名称和地址对应关系,其中的地址一般是位置无关码(PIC码)。( 节点是指分析树上的某个节点。看看编译的书你即可明白。:) 位置无关码是指代码中出现的内存地址和具体运行环境无关(相对地址),这样的代码可被loader载入内存中的任意某个位置运行。从而增... 阅读全文
posted @ 2013-07-18 21:54 z折腾 阅读(3805) 评论(0) 推荐(0)
摘要:GDBTable of Contents1 GDB 1.1 载入程序和core 1.2 断点 1.3 流程控制 1.4 查看代码 1.5 查看变量 1.6 堆栈相关 1.7 线程相关 1.8 汇编相关 1.9 插件 1 GDB1.1 载入程序和core载入程序 gdb –args ./myprogram arg1 arg2 …载入core gdb -c core.xxxx ./myprogram载入core gdb ./myprogram core.xxxxattach进程 gdb -p 1.2 断点断点到当前文件某个函数 break 断点到当前文件某行 break 断点到某个文件位置 bre 阅读全文
posted @ 2013-07-17 22:20 z折腾 阅读(206) 评论(0) 推荐(0)
摘要:一、$(@F)表示"$@"的文件部分,如果"$@"值是"dir/foo.o",那么"$(@F)"就是"foo.o","$(@F)"相当于函数"$(notdir $@)"。"$(*D)""$(*F)"和上面所述的同理,也是取文件的目录部分和文件部分。对于上面的那个例子,"$(*D)"返回"dir",而"$(*F)"返回"foo"" 阅读全文
posted @ 2013-07-15 23:27 z折腾 阅读(1045) 评论(0) 推荐(0)
摘要:一、ar的基本用法 ar命令可以用来创建、修改库,也可以从库中提出单个模块。库是一单独的文件,里面包含了按照特定的结构组织起来的其它的一些文件(称做此库文件的member)。原始文件的内容、模式、时间戳、属主、组等属性都保留在库文件中。 下面是ar命令的格式: ar [-]{dmpqrtx}[abcfilNoPsSuvV] [membername] [count] archive files... 例如我们可以用ar rv libtest.a hello.o hello1.o来生成一个库,库名字是test,链接时可以用-ltest链接。该库中存放了两个模块hello.o和hello1.... 阅读全文
posted @ 2013-07-15 22:19 z折腾 阅读(3014) 评论(1) 推荐(1)
摘要:常用参数格式:ar rcs libxxx.a xx1.o xx2.o libxxx.a是你需要生成的静态库; xx1.o xx2.o 是需要打包依赖的.o文件;注意可以是.a文件(例如ar rcs libxxx.a xx1.o xx2.a)r: 在库中插入模块(替换)。当插入的模块名已经在库中存在,则替换同名的模块。 如果若干模块中有一个模块在库中不存在,ar显示一个错误消息,并不替换其他同名模块。默认的情况下,新的成员增加在库的结尾处,可以使用其他任选项来改变增加的位置。【1】c:创建一个库。不管库是否存在,都将创建。s:创建目标文件索引,这在创建较大的库时能加快时间。(补充:... 阅读全文
posted @ 2013-07-13 16:49 z折腾 阅读(2207) 评论(0) 推荐(0)
摘要:-Wall GCC还有一些其它编译选项也能够产生有用的警告信息。这些选项大多以-W开头,其中最有价值的当数-Wall了,使用它能够使GCC产生尽可能多的警告信息。 阅读全文
posted @ 2013-07-13 16:32 z折腾 阅读(825) 评论(0) 推荐(0)
摘要:wildcard : 扩展通配符例子: 建立一个测试目录,在测试目录下建立一个名为sub的子目录$ mkdir test$ cd test$ mkdir sub在test下,建立a.c和b.c2个文件,在sub目录下,建立sa.c和sb.c2 个文件建立一个简单的Makefilemake以后得到的输入是:a.c ./sub/sa.cendwildcard把 指定目录 ./ 和 ./sub/ 下的所有后缀是c的文件全部展开。 阅读全文
posted @ 2013-07-13 16:26 z折腾 阅读(233) 评论(0) 推荐(0)
摘要:GDB 是 linux 系统上常用的 c/c++ 调试工具,功能十分强大。对于较为复杂的系统,比如多进程系统,如何使用 GDB 调试呢?考虑下面这个三进程系统:一、进程Proc2 是 Proc1 的子进程,Proc3 又是 Proc2 的子进程。如何使用 GDB 调试 proc2 或者 proc3 呢?实际上,GDB 没有对多进程程序调试提供直接支持。例如,使用GDB调试某个进程,如果该进程fork了子进程,GDB会继续调试该进程,子进程会不受干扰地运行下去。如果你事先在子进程代码里设定了断点,子进程会收到SIGTRAP信号并终止。那么该如何调试子进程呢?其实我们可以利用GDB的特点或者其他一 阅读全文
posted @ 2013-07-07 23:26 z折腾 阅读(662) 评论(0) 推荐(0)
摘要:gcc -D:gcc的预定义功能gcc编译的时候提供了预定义功能,参数是-D, 通过man gcc可以了解更多:-D name Predefine name as a macro, with definition 1. -D name=definitionPredefine name as a macro, with definition definition. The contents of definition are tokenized and processed as if they appeared during translation phase three in a #defin 阅读全文
posted @ 2013-07-04 22:59 z折腾 阅读(1128) 评论(0) 推荐(0)
摘要:一、.PHONY : clean每个Makefile中都应该写一个清空目标文件(.o和执行文件)的规则,这不仅便于重编译,也很利于保持文件的清洁。这是一个“修养”(呵呵,还记得我的《编程修养》吗)。一般的风格都是:clean: rm edit $(objects)更为稳健的做法是:.PHONY : cleanclean : -rm edit $(objects)前面说过,.PHONY意思表示clean是一个“伪目标”,。而在rm命令前面加了一个小减号的意思就是,也许某些文件出现问题,但不要管,继续做后面的事。当然,clean的规则不要放在文件的开头,不然,这就会变成make的默认目标,相信.. 阅读全文
posted @ 2013-07-04 22:27 z折腾 阅读(321) 评论(0) 推荐(0)
摘要:MakeFile一、编译和链接在此,我想多说关于程序编译的一些规范和方法,一般来说,无论是C、C++、还是pas,首先要把源文件编译成中间代码文件,在Windows下也就是.obj文件,UNIX下是.o文件,即ObjectFile,这个动作叫做编译(compile)。然后再把大量的ObjectFile合成执行文件,这个动作叫作链接(link)。编译时,编译器需要的是语法的正确,函数与变量的声明的正确。对于后者,通常是你需要告诉编译器头文件的所在位置(头文件中应该只是声明,而定义应该放在C/C++文件中),只要所有的语法正确,编译器就可以编译出中间目标文件。一般来说,每个源文件都应该对应于一个中 阅读全文
posted @ 2013-06-02 20:00 z折腾 阅读(331) 评论(0) 推荐(0)
摘要:1 # Top level hierarchy. 2 prefix = /usr/local 3 exec_prefix = ${prefix} 4 # Pathname of directory to install the binary. 5 BINDIR = ${exec_prefix}/sbin 6 # Pathname of directory to install the man page. 7 MANDIR = ${prefix}/man 8 # Pathname of directory to install the CGI programs. 9 WEBD... 阅读全文
posted @ 2013-06-02 19:58 z折腾 阅读(518) 评论(0) 推荐(0)
摘要:一、元字符集^ 锚定行的开始如:/^sed/匹配所有以sed开头的行。$ 锚定行的结束如:/sed$/匹配所有以sed结尾的行。. 匹配一个非换行符的字符如:/s.d/匹配s后接一个任意字符,然后是d。* 匹配零或多个字符如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。[] 匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。[^] 匹配一个不在指定范围内的字符, 如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。\(..\) 保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成l... 阅读全文
posted @ 2013-06-01 16:31 z折腾 阅读(6775) 评论(0) 推荐(0)
摘要:我们先来谈一谈 sed 好了, sed 本身也是一个管线命令,可以分析 standard input 的啦! 而且 sed 还可以将数据进行取代、删除、新增、撷取特定行等等的功能呢!很不错吧~ 我们先来了解一下 sed 的用法,再来聊他的用途好了![root@www ~]# sed [-nefr] [动作]选项与参数:-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过 sed 特殊处理的那一行(或者动作)才会被列出来。-e :直接在命令列模式上进行 sed 的动... 阅读全文
posted @ 2013-06-01 15:12 z折腾 阅读(225) 评论(0) 推荐(0)