- 博客(37)
- 资源 (1)
- 收藏
- 关注
转载 makefile自动化变量
在模式规则中,规则的目标和依赖文件名代表了一类文件名。命令是对所有这一类文件重建过程的描述,显然,在命令中不能指定特定的文件名,否则模式规则将没有了意义。那么在模式规则的命令行中该如何表示文件,将成我们这一小节的讨论重点。 make中使用了“自动环变量”来实现这个目的,自动化变量的取值是根据具体的规则决定的,就是说对不同的规则其所代表的文件名不同。前边我们也看到了很多例子中使用到了自动化
2017-09-27 17:50:43 262
转载 makefile后缀规则
后缀规则是一种老风格定义隐含规则的方式。新版本的make中使用模式规则取代了这种实现方式,模式规则和它相比更加清晰明了。现在版本保留它的原因只是为了能够兼容旧的makefile文件。后缀规则有两种类型:“双后缀”和“单后缀”。双后缀规则定义一对后缀:目标文件的后缀和依赖目标的后缀。它匹配所有后缀为指定目标后缀的文件名。对于一个匹配的目标文件,它的依赖文件是这样形成:将目标文件中的后缀替换为
2017-09-27 17:31:39 5201
原创 make缺省规则
当在Makefile中没有重建的规则时(没有重建它的明确规则和可用的隐含规则)就执行这个缺省规则的命令来创建它。定义这样一个规则,我们可以使用最终万用规则来实现。如可以在Makefile中定义这样一个规则:%:: touch $@对没有找到的所有的文件使用“touch”命令创建一个空的文件。实现一个缺省规则的方式也可以不使用万用规则来实现, 可以使用伪目标“.DEFAULT”实现:.D
2017-09-27 17:26:08 1119
原创 makefile模式规则
模式规则类似于普通规则,只是在模式规则中,目标的定义中需要包含“%”字符(确切地说是一个),包含“%”的目标被用来匹配一个文件名,“%”可以匹配任何非空字符串。1、文件名中“%”匹配的部分称为“茎”。2、规则的依赖文件中同样可以使用“%”,依赖中的“%”的取值情况由“茎”决定。3、规则的依赖文件也可以不包含模式字符“%”,此时,它表示所有符合目标模式的目标文件都依赖于一个指定的文件。4
2017-09-27 17:19:58 1044
原创 make隐含规则
“隐含规则”为 make 提供了重建一类目标文件通用方法,不需要在 Makefile 中明确地给出重建某一个目标的命令,甚至可以不用写出明确的规则。make会自动根据已存在(或者可以被创建)的源文件类型来启动相应的隐含规则。1、make会对那些没有命令行的规则、 双冒号规则寻找一个隐含规则来执行。 注意:如果规则存在命令行,则make就会执行命令行,不会启动隐含规则。2、作为一个规则的
2017-09-27 17:06:14 414
转载 make的命令行选项
make支持的所有命令行参数(这些参数可以通过 make 的 man 手册查看):-b-m忽略,提供其它版本 make 兼容性。-B--always-make强制重建所有的规则中出现的目标文件。-C DIR--directory=DIR在读取Makefile之前,进入目录“DIR”,就是切换工作目录到“DIR”之后执行make。存在多个“-C”选项时, make的最终工作目录
2017-09-27 14:52:53 769
原创 make替换变量的定义
执行make时,一个含有“=”的命令行参数“V=X”的含义是将变量“V”的值设置为“X”。通过这种方式定义的变量会替代在Makefile中同名变量定义(如果存在,并且在Makefile中没有使用指示符“override” 对这个变量进行生命),称之为命令行参数定义覆盖普通变量定义。通过命令行参数定义变量时,也存在两种风格的变量定义:递归展式定义和直接展开式定义。除非在命令行
2017-09-27 14:26:37 570
原创 makefile双冒号规则
双冒号规则就是使用“::”代替普通规则的“:”得到的规则。双冒号规则允许在多个规则中为同一个目标指定不同的重建目标的命令,1、Makefile中多规则目标的规则类型必须一致,要么都是普通规则,要么都是双冒号规则。而不允许一个目标同时出现在两种不同的规则中。2、多规则目标的每个规则会被独立的处理, 而不是像普通规则那样合并所有的依赖到一个目标文件。这就意味着对这些规则的处理就像多个不同的
2017-09-27 09:57:08 752
转载 makefile静态模式
静态模式规则的基本语法:TARGETS ...: TARGET-PATTERN: PREREQ-PATTERNS ... COMMANDS ...“ TAGETS”列出了此规则的一系列目标文件。像普通规则的目标一样可以包含通配符。“TAGET-PATTERN”和“ PREREQ-PATTERNS”说明了如何为每一个目标文件生成依赖文件。从目标模式( TAGET-PATTERN)的目标名
2017-09-27 09:32:52 372
转载 makefile多规则目标
Makefile 中,一个文件可以作为多个规则的目标出现。这种情况时,此目标文件的所有依赖文件将会被合并成此目标一个依赖文件列表,其中任何一个依赖文件比目标更新(比较目标文件和依赖文件的时间戳)时, make 将会执行特定的命令来重建这个目标。对于一个多规则的目标,重建此目标的命令只能出现在一个规则中(可以是多条命令)。如果多个规则同时给出重建此目标的命令, make将使用最后一个规则所以
2017-09-27 09:22:00 938
原创 makefile空目标
空目标是伪目标的一个变种,用来记录上一次执行此规则定义命令的时间。和伪目标不同的是:这个目标可以是一个存在的文件,一般文件的具体内容我们并不关心,通常此文件是一个空文件。空目标文件命令部分都会使用“touch”在完成所有命令之后来更新目标文件的时间戳,记录此规则命令的最后执行时间。 make 时通过命令行将此目标作为终极目标,当前目录下如果不存在这个文件,“touch”会在第一次执行时创建
2017-09-27 09:16:44 1361
原创 makefile空目标
空目标是伪目标的一个变种,用来记录上一次执行此规则定义命令的时间。和伪目标不同的是:这个目标可以是一个存在的文件,一般文件的具体内容我们并不关心,通常此文件是一个空文件。空目标文件命令部分都会使用“touch”在完成所有命令之后来更新目标文件的时间戳,记录此规则命令的最后执行时间。 make 时通过命令行将此目标作为终极目标,当前目录下如果不存在这个文件,“touch”会在第一次执行时创建
2017-09-26 15:08:37 637
原创 makefile强制目标
如果一个规则没有命令或者依赖,而且它的目标不是一个存在的文件名。在执行此规则时,目标总会被认为是最新的。就是说:这个规则一旦被执行, make 就认为它的目标已经被更新过。这样的目标在作为一个规则的依赖时,因为依赖总被认为被更新过,因此作为依赖所在的规则定义的命令总会被执行。看一个例子:clean: FORCErm $(objects)FORCE:这个例子中,目标“FORCE”符合上
2017-09-26 14:34:01 2033
原创 makefile伪目标
伪目标主要用于执行其所在规则定义的命令,不需要重建文件,也称标签。在书写伪目标规则时,首先需要声明目标是一个伪目标,之后才是伪目标的规则定义。目标“clean”书写格式应该如下:.PHONY: targetNametargetName: 依赖列表 命令备注:1、伪目标每次都会被执行。2、当一个目标被声明为伪目标后,make 在执行此规则时不会试图去查找隐含规则来创建这个目标。我
2017-09-26 14:31:14 266
原创 makefile终极目标
所谓终极目标就是make最终所要重建的、 Makefile中某个规则的目标。为了完成对终极目标的重建,可能会触发它的依赖或者依赖的依赖文件被重建的过程。默认情况下,终极目标就是出现在Makefile中,除以点号“.”开始的第一个规则中的第一个目标(如果第一个规则存在多个目标)。 在Makefile所在的目录下执行“make”时,将完成对默认终极目标的重建。另外,也可以通过命令行将
2017-09-26 14:00:24 1405
原创 makefile规则语法
通常规则的语法格式如下:TARGETS : PREREQUISITESCOMMAND...或者是这样:TARGETS : PREREQUISITES ; COMMANDCOMMAND...规则中“ TARGETS”可以是空格分开的多个文件名,也可以是一个标签(如执行清空的“clean”)。“TARGETS”的文件名可以使用通配符。通常规则只有一个目标文件,偶尔会在一个规则中需要
2017-09-26 10:27:14 284
原创 指定makefile文件
默认情况下,make会在工作目录(执行make的目录)下依次搜索名为“GNUmakefile”、“makefile”和“Makefile”的文件,搜到到文件就停止搜索,然后解析执行该文件,如果make程序在工作目录下无法找到以上三个文件中的任何一个,它将不读取任何其他文件作为解析对象。“GNUmakefile”只有“GNUmake”才可以识别,而其他版本的make程序只会在工作目录下搜索
2017-09-26 10:12:55 2859
原创 makefile变量的定义
一、变量名Makefile变量名是不包括":"、"#"、"="、前置空白和尾空白的任何字符串。(1)变量名最好由字母、数字和下划线组成 尽管在GNU make中没有对变量的命名有其它的限制,但是字母、数字和下划线以外的字符 可能会在make的后续版本中被赋予特殊的含义。(2)变量名大小写敏感(3)变量名中可以包含函数或者其它变量的引用(4)变量的值在长度上没有限制。值较长时可以
2017-09-22 17:23:19 1097 1
转载 vim之map 映射快捷键
map简介map是一个映射命令,将常用的很长的命令映射到一个新的功能键上。map是Vim强大的一个重要原因,可以自定义各种快捷键,用起来自然得心应手。映射的种类有五种映射存在:用于普通模式: 输入命令时。 用于可视模式: 可视区域高亮并输入命令时。 用于操作符等待模式: 操作符等待中 ("d","y","c" 等等之后)。 用于插入模式: 也用于替换模式。
2017-09-07 10:50:36 1140
原创 vim插件之MiniBufExplorer
当只编辑一个buffer的时候MiniBufExplorer派不上用场, 当打开第二个buffer的时候, MiniBufExplorer窗口就自动弹出来了, 见下图: 上面那个狭长的窗口就是MiniBufExplorer窗口, 其中列出了当前所有已经打开的buffer, 当你把光标置于这个窗口时, 有下面几个快捷键可以用: 向前循环切换到每个buffer名上
2017-09-07 10:00:16 10716
原创 taglist选项
1、Tlist_Ctags_Cmd 指定Exuberant ctags程序的位置,如果它没在PATH变量所定义的路径中,需要使用此选项设置一下。2、Tlist_Show_One_File 设置为1,则不同时显示多个文件的 tag ,只显示当前文件的tag。缺省为显示多个文件中的tag。3、Tlist_File_Fold_Auto_Close 设置为1,当同时显示多个文件中的tag时,
2017-09-06 11:14:49 942
转载 cscope选项
使用set命令来设置cscope的所有选项。也可以在启动文件.vimrc中做这件事情。有些cscope相关变量只有在.vimrc中才是合法的,在vim已经启动之后再来设置它们没有任何作用!‘cscopeprg’指定了执行cscpoe的命令。默认是”cscope”。例如: :set csprg=/usr/local/bin/cscope‘cscopequickfix
2017-09-06 10:15:38 665
原创 vim插件之bufexplorer
bufexplorer插件可以打开历史文件列表以达到快速切换文件的目的BufExplorer插件在此处下载:http://vim.sourceforge.net/scripts/script.php?script_id=42下载后,把该文件在~/.vim/目录中解压缩,这会在你的~/.vim/plugin和~/.vim/doc目录中各放入一个文件:plugin/ bufexplorer.
2017-09-05 16:55:47 2084
转载 将winmanager插件显示在右侧
打开winmanager.vim,在function! StartWindowsManager()函数中将wincmd H 修改为wincmd L:" for now assume that the explorer windows always stay on the left. " TODO: make this optional later" wincmd H wi
2017-09-05 16:30:28 757
原创 ctrlp快捷键
ctrlp用于模糊搜索, 可以搜索文件/buffer/mru/tag等等。在 vim 的 normal 模式之下按 Ctrl+P 组合键即可弹出搜索窗口。* f5> 更新目录缓存。* c-f> / c-b> 在模式之间切换* c-d> 在”完整路径匹配“ 和 ”文件名匹配“ 之间切换* c-r> 在“字符串模式” 和 “正则表达式模式” 之间切换* c-j> / c-k
2017-09-05 15:36:31 4326
原创 vim插件之quickfix
quickfix是vim内置插件,用于浏览命令执行结果信息。命令需要进行设定,才能把执行结果显示到quickfix中。如cscope需要在.vimrc中添加如下语句:set cscopequickfix=s-,c-,d-,i-,t-,e-常用的quickfix命令为::cc 显示详细错误信息:cp 跳到上一个错误:cn 跳到下一个错误:c
2017-09-04 16:57:35 5392
转载 去掉windows文本的多余的回车符(^M)
1) 使用sed 去掉windows下的回车符 (注意^M 在linux 下写法 按^M 是回车换行符,输入方法是按住CTRL+v,松开v,按m)sed -i 's/^M//g' filename 2) 在vim下类似 :%s/^M//g (^M输入方法和上面方法相同) 3) 使用dos2unix dos2unix filename
2017-09-04 16:27:15 1381
转载 vim -t 选项
vim -t 可以在 vim 启动时设置查找的函数名,比如 $ vim -t start_kernel就会直接跳转到 start_kernel 符号的位置。
2017-09-04 16:26:08 1990
转载 去除 “existing swap file” 警告
在 .vimrc里追加下面一行即可:set shortmess+=A 参考: :help shortmess:A don't give the"ATTENTION" message when an existing swap file is found.
2017-09-04 16:23:37 236
原创 cscope 结果输出到 quickfix窗口
在$HOME/.vimrc下追加如下一行:set cscopequickfix=s-,c-,d-,i-,t-,e-
2017-09-04 16:21:24 3300
转载 cscope 使用时打开新的窗口
在 vim 中使用 cscope 时, : cs f s symbol-name 或相应的快捷键执行后当前窗口就跳转到引用该符号的位置。如果想跳转的同时打开一个新的窗口,可以使用如下命令:: scs f s symbol-name这里的 scs 应该是 split 的意思。另外,上面这个命令是将窗口横向分割,如果要纵向分割的话,可以使用如下命令:: vert scs f
2017-09-04 15:24:26 956
原创 vim插件之taglist
想必用过Source Insight的人都记得这样一个功能:SI能够把当前文件中的宏、全局变量、函数等tag显示在Symbol窗口,用鼠标点上述tag,就跳到该tag定义的位置;可以按字母序、该tag所属的类或scope,以及该tag在文件中出现的位置进行排序;如果切换到另外一个文件,Symbol窗口更新显示这个文件中的tag。在VIM中的taglist插件所实现的就是上述类似的功能,
2017-09-04 15:19:34 294
转载 vim插件之ctags
ctags 是一个外部程序,它通过扫描代码库,生成关键字的索引,使得我们可以快速地跳到函数及类的定义之处。1、用 ctags 创建代码库的索引ctags -R在 Vim 中直接调用 ctags::!ctags -R ctags 创建了一个名为 tags 的纯文本文件,其内容是 ctags 经过对当前目录及子目录的源文件的分析而生成的关键字索引。标签文件的前几
2017-09-04 15:02:13 305
原创 vim多窗口操作-------改变窗口布局
下面的第三个字母都是大写,按完Ctrl + w之后,再按shif + 相应的字母。Ctrl + w + H:移动窗口至屏幕左端,并占用全部高度Ctrl + w + J:移动窗口至屏幕底端,并占用全部宽度Ctrl+ w + K:移动当前窗口至屏幕顶端,并占用全部宽度Ctrl + w + L:移动窗口至屏幕右端,并占用全部高度 Ctrl + w+
2017-09-04 13:48:17 2604
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人