Make命令选项(留着以免自己忘了)
Make命本身可带有四种参数:标志、宏定义、描述文件名和目标文件名。其标准形式为:
Make [flags] [macro definitions] [targets]
Unix系统下标志位flags选项及其含义为:
-f file 指定file文件为描述文件,如果file参数为"-"符,那么描述文件指向标准输入。如果没有"-f"参数,则系统将默认当前目录下名为makefile或者名为Makefile的文件为描述文件。在Linux中, GNU make 工具在当前工作目录中按照GNUmakefile、makefile、Makefile的顺序搜索 makefile文件。
-i 忽略命令执行返回的出错信息。
-s 沉默模式,在执行之前不输出相应的命令行信息。
-r 禁止使用build-in规则。
-n 非执行模式,输出所有执行命令,但并不执行。
-t 更新目标文件。
-q make操作将根据目标文件是否已经更新返回"0"或非"0"的状态信息。
-p 输出所有宏定义和目标文件描述。
-d Debug模式,输出有关文件和检测时间的详细信息。
Linux下make标志位的常用选项与Unix系统中稍有不同,下面我们只列出了不同部分:
-c dir 在读取 makefile 之前改变到指定的目录dir。
-I dir 当包含其他 makefile文件时,利用该选项指定搜索目录。
-h help文挡,显示所有的make选项。
-w 在处理 makefile 之前和之后,都显示工作目录。
通过命令行参数中的target ,可指定make要编译的目标,并且允许同时定义编译多个目标,操作时按照从左向右的顺序依次编译target选项中指定的目标文件。如果命令行中没有指定目标,则系统默认target指向描述文件中第一个目标文件。
通常,makefile 中还定义有 clean 目标,可用来清除编译过程中的中间文件,例如:
clean:
rm -f *.o
运行 make clean 时,将执行 rm -f *.o 命令,最终删除所有编译过程中产生的所有中间文件。
隐含规则
在make 工具中包含有一些内置的或隐含的规则,这些规则定义了如何从不同的依赖文件建立特定类型的目标。Unix系统通常支持一种基于文件扩展名即文件名后缀的隐含规则。这种后缀规则定义了如何将一个具有特定文件名后缀的文件(例如.c文件),转换成为具有另一种文件名后缀的文件(例如.o文件):
.c:.o
$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
系统中默认的常用文件扩展名及其含义为:
.o 目标文件
.c C源文件
.f FORTRAN源文件
.s 汇编源文件
.y Yacc-C源语法
.l Lex源语法
在早期的Unix系统系统中还支持Yacc-C源语法和Lex源语法。在编译过程中,系统会首先在makefile文件中寻找与目标文件相关的.C文件,如果还有与之相依赖的.y和.l文件,则首先将其转换为.c文件后再编译生成相应的.o文件;如果没有与目标相关的.c文件而只有相关的.y文件,则系统将直接编译.y文件。
而GNU make 除了支持后缀规则外还支持另一种类型的隐含规则--模式规则。这种规则更加通用,因为可以利用模式规则定义更加复杂的依赖性规则。模式规则看起来非常类似于正则规则,但在目标名称的前面多了一个 % 号,同时可用来定义目标和依赖文件之间的关系,例如下面的模式规则定义了如何将任意一个 file.c 文件转换为 file.o 文件:
%.c:%.o
$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
#EXAMPLE#
下面将给出一个较为全面的示例来对makefile文件和make命令的执行进行进一步的说明,其中make命令不仅涉及到了C源文件还包括了Yacc语法。本例选自"Unix Programmer's Manual 7th Edition, Volume 2A" Page 283-284
【用Vim打造IDE】之cscope使用
这是【用Vim打造IDE】系列的第四篇,介绍在程序中快速查找,定位的功能。
一、【用Vim打造IDE】之VIM的基本设置
二、【用Vim打造IDE】之切换工作目录
三、【用Vim打造IDE】之Ctags插件
四、【用Vim打造IDE】之cscope使用
个人觉得cscope插件是所有vim插件中最强大的一个,使用它给我带来的方便,快捷以及灵活性,使我的日常软件开发效率和读代码的效率提高了许多。在给它投票时,我投了Life Change,是的,它改变了我的生活。
Cscope最先由MIT的研究人员开发,也算是系出名门。它能够完成什么样的功能呢?我先简单的列举几条:
1、在函数调用点快速跳转到函数定义处,反之亦然。如果有多个调用点,会以列表形式给出。
2、在函数声明处快速跳转到函数定义处,反之亦然。
3、快速查找全工程里出现光标所在处的单词的地方。
4、查找本函数调用的函数。
5、查找本函数被调用的地方。
这些只是cscope功能的一小部分,如果细心挖掘,你会发现它给你平时开发带来的便利简直是太大了。总是,我是爱上它了。
【用Vim打造IDE】之Ctags插件
这是【用Vim打造IDE】系列的第三篇,介绍在VIM中跳来跳去的功能,呵呵……
一、【用Vim打造IDE】之VIM的基本设置
二、【用Vim打造IDE】之切换工作目录
三、【用Vim打造IDE】之Ctags插件
四、【用Vim打造IDE】之cscope使用
用过SourceInsight的童鞋都知道,SourceInsight之所以强大,是因为它在代码中强大的跳转能力,无论是函数,变量,还是宏定义等等等等,它都能在你需要的时候迅速跳转到指定位置。查看函数的调用情况,声明和定义等等。在查看代码方面很是了得。同样的。VS也有相应的功能。
那么,我们要将VIM打造成一个强大的IDE,这个功能决不能少。今天就给大家推出Ctags插件,它使得VIM同样具有我们上面提到的功能。Ctags最初是以VIM的一个插件发布的,但现在已经成为VIM的标准插件,安装VIM的时候已经默认安装,所以不需要手动安装。
Ctags支持多达25中编程语言,能完成一种语言中几乎所有的自定义内容的跳转。大约有:
类名 宏定义 枚举 函数定义 函数原型和声明 类,接口,结构体,联合体 typedef内容 变量(包括外部变量)
是不是很强大?好了,下面介绍使用方法。
(1)在http://ctags.sourceforge.net/下载对应操作系统的版本,在Windows下建议放到C:/Windows/system32/下。CD到源代码存放目录,执行命令ctags -R,会在源代码目录下生成一个tags文件。-R表示递归分析子目录的文件。
(2)现在编辑.vimrc文件,将tags文件的路径加进去。在.vimrc文件中加入:
1 2 3 | "设置tags set tags=E:/source/tags "Windows下 set tags=~/source/ "Linux下 |
(3)用vim打开一个源文件文件,将光标定位到任意的函数或者变量上,按下“Ctrl+]”组合键,即可跳到函数或变量声明的地方,宏定义等等都是一样。再按“Ctrl+T”跳回到原处。是不是很方便?即使用户使用了N次“Ctrl+]”查找了N个变量,按N次“Ctrl+t”也能回到最初打开的文件,它会按原路返回 。 ^_^
每一个软件开发人员绝对必须掌握的关于 Unicode 和字符集的知识
| 关键字: Unicode, Character Set, 字符集, UTF-8, ANSI, ASCII, UTF-7
原文标题: The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets(No Excuses!) 原文链接: http://www.joelonsoftware.com/printerFriendly/articles/Unicode.html 作者: Joel Spolsky |
来源:http://blog.csdn.net/inelm/ 作者:Joel Spolsky
ASCII 码
------------------------------------------------------------------------------------
7 位(00~7F)。 32 ~ 127 表示字符。32 是空格, 32 以下是控制字符(不可见)。
第8位没有被使用。全世界很多人同时对这个位的含义发展了不同的用处。比如 IBM PC 中的 OEM 字符集。
最后就 128 位以下的用处达成共识,制定了 ASCII 标准。
而 128 位以上的可能有不同的解释,这些不同的解释就叫做 code pages.
甚至有用于在同一台电脑上解释多种语言的 code page.
【用Vim打造IDE】之切换工作目录
这篇文章是【用Vim打造IDE】系列的第二篇,用来讲解自定义工作目录以及自动切换。你可以再下面的列表里选择之前的文章。
一、【用Vim打造IDE】之VIM的基本设置
二、【用Vim打造IDE】之切换工作目录
三、【用Vim打造IDE】之Ctags插件
四、【用Vim打造IDE】之cscope使用
上一期我们将了Vim安装后的一些常用设置。我想,这些常用设置已经满足了你的基本需要。为了更好的适应大型项目,我们首先的设置好大型项目的工作目录。刚安装好Vim后,默认的工作目录是~/(Linux下)或C:\Documents and Settings\Username\(Windows)。这样可满足不了我们的需要。现在就做一点小手脚,修改一下吧。
假设我们的源代码放在E:\Source\里,并且这个大型的项目还有很多Project,每个Project都放在以ProjectName命名的文件夹里。例如我们有Project1,Project2两个项目,放在以Project1和Project2命名的文件夹里。将下面这段代码放在.vimrc文件里,我们就可以用Chw命名来切换工作目录啦。(注意:自定义命令都必须以大写字母开头。)
1 2 3 4 5 6 7 8 9 10 | set autochdir "自动切换工作目录,以当前打开的文件所在目录为准
"定义工作目录
let g:Source="E:/source/"
let g:project1=g:source . "bin/project1/"
let g:project2=g:source . "bin/project2/"
function Cw(dir)
execute ":cd " . a:dir
endfunction
call Cw(g:JCXA)
com -nargs=1 Chw call Cw() |
Vim一启动,就会自动将当前的工作目录切换到E:/Source/。在vim的命令模式下,可以用
:pwd
查看当前的工作目录。输入
:Chw Project1
就会转到Project1的目录下了。如果你还有更多的的Project,完全可以用这种办法来设置。
【用Vim打造IDE】之VIM的基本设置
从这篇文章起,我会连续介绍如何将VIM打造成强大的IDE——集成开发环境。VIM(或者说VI)是世界上无可匹敌的编辑器之王(当然,Emacs也算。但或多多少有Stallman的崇拜心理在里面)。这是系列的第一篇,讲解vim的基本设置
一、【用Vim打造IDE】之VIM的基本设置
二、【用Vim打造IDE】之切换工作目录
三、【用Vim打造IDE】之Ctags插件
四、【用Vim打造IDE】之cscope使用
如何安装就不讲了,相信从事VIM的人对软件安装不会有什么问题。这里顺便贴出来吧,省得你自己敲。
Debian/Ubuntu:
1 | sudo apt-get install vim |
Redhat/Fedora:
1 | sudo yum –y install vim |
Windows:在http://www.vim.org/download.php#pc下载最新版本的Gvim进行安装。
这第一篇文章介绍如何将默认的VIM设置修改成适合自己习惯的设置,使用起来更加顺手。下面贴出我的.vimrc文件的配置。Linux中此文件在~/.vimrc,windows下在C:\Documents and Settings\username\_vimrc,以文本文件的方式打开编辑就可以了。每一行都有详细的说明,大家可以作为参考并修改成其他的。因为我基本上是用C/C++,所以大部分都是将C当做目标语言设置的。
微软日语输入法快捷键
1)平假名、片假名、英数字间的转换
输入罗马字之后,按F6转换为平假名,按F7转换为全角片假名,按F8转换为半角片假名,按F9转换为全角英文数字,按F10转换为半角英文数字。
2)快捷键
① 快捷键Alt + ~(Esc键下边的那个键)
可以在直接输入Direct Input(图标A)和平假名Hiragana(图标あ)间切换
② 快捷键Alt + Shift
在系统默认输入/中文输入法和日文输入法之间切换
③ 快捷键Alt +CapsLock 和Ctrl + CapsLock
输大量片假名时,在平假名Hiragana(图标あ)模式下,可以按Alt +CapsLock切换到片假名Katakana(图标カ)模式,输完按CTRL+CAPSLOCK可切回平假名Hiragana(图标あ)。
源代码阅读——快速了解函数的功能
这里提供一个快速的方法。当然,如果所有的一切步骤都不能满足的话,建议你单步调试。在程序里打入软中断,编译成debug版本即可。
To understand what a function (or method) is doing you can employ one of the following strategies.
1.Guess, based on the function name.
2.Read the comment at the beginning of the function.
3.Examine how the function is used.
4.Read the code in the function body.
5.Consult external program documentation.
error LNK2005解决办法
在用VS编译连接过程时,有时候会遇到这样的错误。原因大概是你重复定义,但总是找不出问题所在。
下面是我第一次遇到这个问题的情况。
LineCounterDlg.obj : error LNK2005: "unsigned int lc_IsStartPauseResumeEndThread" (?lc_IsStartPauseResumeEndThread@@3IA) already defined in ChildThread.obj
第一次遇到这个问题是在一个.h文件中定义了一个全局变量,而这个.h文件却被两个.cpp文件包含了。也就是说,在这两个.cpp文件里,都定义了这个全局变量,当然会提示这样的错误。
我们必须把全局变量定义在一个.cpp文件里。那么,在另外一个.cpp文件里需要这些全局变量的时候应该怎么办呢?extern关键字。
比如我在a.cpp定义了一个全局变量int a = 0;现在我需要在b.cpp里使用到这个值。你需要做的是在b.cpp开头这样定义:extern int a;并且,注意,不要初始化。一旦初始化就出错了。试想,一个变量在两个地方初始化了,它听谁的啊?比如两个总经理今天让你陪着出去吃饭,你跟谁去呢?是不是?
extern int a;只是声明这是一个在其他地方定义的变量,这里只是使用一下罢了。
总之,这个问题就是因为有重复定义的变量引起的,好好检查你的程序,一定能解决的。
希望对你有帮助,如果有什么需要探讨的,欢迎留言哦。
自定义WM_CLOSE消息
在编写Windows程序时,时常需要捕获WM_CLOSE消息,也就是关闭应用程序窗体的消息,来自定义关闭应用程序时候的动作。窗体在收到WM_CLOSE消息后,会Destroy窗体,释放资源,最后退出程序。
就像大家经常见到的程序一样,有时点击右上角的关闭按钮(就是那个红叉叉啦…)。程序不会退出,而是在桌面右下角的任务栏里。比如:千千静听。那么,在程序里是如何实现的呢?下面,我就简单介绍一下:
1、在.cpp文件的消息映射里加入自定义消息映射。格式形如下:ON_MESSAGE(WM_CLOSE, OnClose)
2、在头文件里,声明你的OnClose()方法。形如:afx_msg LRESULT OnClose()。注意这里的返回值类型是LRESULT。
3、在.cpp文件里实现你的OnClose()方法,在这里,你可以做很多事情啦。比如:结束全部子线程。然后释放所有资源后再退出。
在这里只是简单的介绍一下实现过程,如果你有什么需要讨论的,欢迎留言。

















