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功能的一小部分,如果细心挖掘,你会发现它给你平时开发带来的便利简直是太大了。总是,我是爱上它了。
is not in the sudoers file解决办法
用sudo时提示"xxx is not in the sudoers file. This incident will be reported.其中XXX是你的用户名,也就是你的用户名没有权限使用sudo,我们只要修改一下/etc/sudoers文件就行了。下面是修改方法:
1)进入超级用户模式。也就是输入"su –"。记住这里有一个“-”,而不是你平时直接使用的“su”。系统会让你输入超级用户密码,输入密码后就进入了超级用户模式。
2) 直接输入 visudo,注意中间没有空格,将会打开/etc/sudoers文件。
3) 定位到最后一行,在下面添加"Username ALL=(ALL) ALL"(这里的Username是你的用户名),然后保存(就是先按一 下Esc键,然后输入":wq")退出。
4) 大功告成,收工!
Trying Ubuntu 9.04
昨天安装了Ubuntu 9.04,并且启用了传说中的EXT 4 file system,体验了一把快速启动的快感。反正在我见过的操作系统中,除了MS-DOS,我还没有见过启动这么快的系统。另外,我发现我的Ctrl+Alt+Backspace组合键失效了,不知道是官方故意屏蔽以免误操作,还是我设置什么了。但我想到现在为止都没想出来我到底修改什么了,我可是全新安装的呀。
另外还安装了iBus,听别人说是很好的输入法框架,但是我用了几个小时,都没感觉出来它比fcitx高级到哪儿?让我放弃它的最大理由是不能用[ ]键翻页,我可是用惯了这两个了。所以,干掉,重新安装了“小企鹅”。如果您习惯用- =和, .键来翻页的话,倒是可以试一试。不过在安装前需要加上官方的DEB包的源,也可以下载源码自己编译,推荐后者。如果你非得用DEB包安装的话,需要加入官方的PPA源,在终端下执行:
1 2 | sudo echo " deb http://ppa.launchpad.net/ibus-dev/ppa/ubuntu jaunty main" >> /etc/apt/sources.list sudo apt-get install ibus-pinyin |
不过这个在时间上可是很……嘿嘿,很慢!正在试用更多的功能,我还有很多问题,如果您有心交流,就在下面留言吧。
VMWare Workstation V6.5 Build 110068 Beta
VMWare是一个“虚拟PC”软件。它使你可以在一台机器上同时运行二个或更多Windows、DOS、Linux系统。与“多启动”系统相比,VMWare采用了完全不同的概念。多启动系统在一个时刻只能运行一个系统,在系统切换时需要重新启动机器。VMWare是真正“同时”运行,多个操作系统在主系统的平台上,就象标准Windows应用程序那样切换。而且每个操作系统你都可以进行虚拟的分区、配置而不影响真实硬盘的数据,你甚至可以通过网卡将几台虚拟机用网卡连接为一个局域网,极其方便。
不需要重开机就能在同一台电脑使用好几个OS,VMware主要的功能有:
1、不需要分区或重开机就能在同一台PC上使用两种以上的操作系统。
2、完全隔离并且保护不同OS的操作环境以及所有安装在OS上面的应用软件和资料。
3、不同的OS之间还能互动操作,包括网络、周边、文件分享以及复制贴上功能。
4、有复原(Undo)功能。
5、能够设定并且随时修改操作系统的操作环境,如:内存、磁碟空间、周边设备等等。
Workstation 6.0包含了许多令人兴奋的新功能,如:
支持Windows Vista--使用Windows Vista作为主机操作系统
多显示器显示--你可以配置一款VM来显示在多部显示器上,或者将多个VM显示在各个显示器上
集成虚拟调试器--Workstation和Visual Studio、Eclipse集成,因此你可以直接从所喜欢的IDE Automation API(VIX API 2.0)中在VM中部署、运行和调试程序--你可以编写脚本和程序自动进行VM测试
无人职守模式--你可以在后台运行VM
VMware Workstation 6.0 Beta includes exciting new features, such as:
- Support for Windows Vista - Use Windows Vista as host operating system
- Multiple monitor display - You can configure a VM to span multiple monitors, or multiple VMs to each display on separate monitors
- Support for USB 2.0 devices - You can now use peripherals that require high-speed performance in your VMs, such as MP3 Players and fast storage devices
- VM Record/Replay - Use this feature to record VM activities and be guaranteed to reproduce the exact VM state 100% of the time
- Integrated Virtual Debugger - Workstation integrates with Visual Studio and Eclipse so you can deploy, run, and debug programs in a VM directly from your preferred IDE
- Automation APIs (VIX API 2.0) - You can write scripts and programs to automate VM testing
This release provides experimental support for the following operating systems now in Beta:
- 32-bit and 64-bit Red Hat Enterprise Linux 4.5 (Beta, formerly called 4.0 Update 5) and Red Hat Enterprise Linux 5.0 (Beta) as host and guest operating systems
- 32-bit and 64-bit SUSE Linux Enterprise Server 9 SP4 (Beta) as host and guest operating systems
This release provides full support for the following operating systems:
- 32-bit and 64-bit Windows Vista as host and guest operating systems
- 32-bit and 64-bit Ubuntu Linux 6.10 as host and guest operating systems
- 32-bit and 64-bit Mandriva Linux 2007 as host and guest operating systems
- 32-bit and 64-bit Solaris 10 Update 3 as guest operating system
- 32-bit Novell Netware 6.5 SP5 as guest operating system
序列号:
DKRKN-DYP4G-Y21FC-4WWQQ
Q0WUH-48Q6J-42NDC-4PTNQ
A8HC7-1GGR0-E4PD4-4T694
DTX01-RU923-Y05FY-4YTQK
6A8L6-F2TQJ-LE7DP-4T1V0
M80MH-FF90D-4254G-4P9NQ
9ANWD-DDJ8Q-LAJDG-4W8X2
39WK0-4A04X-0A466-4R5J4
9AJPJ-0RW0G-M0H7T-4D9NY
LCT4T-24GFE-A816V-4MTQQ
下载地址:
VMWare Workstation V6.5 Build 110068 Beta
VMWare Workstation V6.0 Build 45371 Final 精简版
VMWare Workstation V6.0 Build 45371 Final 汉化补丁
VMWare Workstation V5.5.2 Build 29772 完美汉化绿色精简版
VMWare Workstation V5.5.2 Build 29772 完美汉化绿色完整版
关于fork()的返回值……
先来看一段程序吧,fork()是在linux下编写进程相关的程序的函数,我
程序代码#include <sys/types.h>
#include <stdio.h>
int main ()
{
pid_t pid;
pid=fork();
if (pid < 0)
printf("error in fork!");
else if (pid == 0)
printf("i am the child process, my process id is %d
",getpid());
else
printf("i am the parent process, my process id is %d
",getpid());
return 0;
}
大家先不要看我的结果,可以自己先试一试,看看是不是你想的那样。
结果是:
程序代码[root@localhost c]# ./a.out
i am the child process, my process id is 4286
i am the parent process, my process id is 4285
我就想不到为什么两行都打印出来了,在我想来,不管pid是多少,都应该只有一行才对。那么这到底是为什么呢?那么我们需要知道fork()的执行过程。
要搞清楚fork的执行过程,就必须先讲清楚操作系统中的“进程(process)”概念。一个进程,主要包含三个元素:
o. 一个可以执行的程序;
o. 和该进程相关联的全部数据(包括变量,内存空间,缓冲区等等);
o. 程序的执行上下文(execution context)。
不妨简单理解为,一个进程表示的,就是一个可执行程序的一次执行过程中的一个状态。操作系统对进程的管理,典型的情况,是通过进程表完成的。进程表中的每一个表项,记录的是当前操作系统中一个进程的情况。对于单 CPU的情况而言,每一特定时刻只有一个进程占用 CPU,但是系统中可能同时存在多个活动的(等待执行或继续执行的)进程。
一个称为“程序计数器(program counter, pc)”的寄存器,指出当前占用 CPU的进程要执行的下一条指令的位置。
当分给某个进程的 CPU时间已经用完,操作系统将该进程相关的寄存器的值,保存到该进程在进程表中对应的表项里面;把将要接替这个进程占用 CPU的那个进程的上下文,从进程表中读出,并更新相应的寄存器(这个过程称为“上下文交换(process context switch)”,实际的上下文交换需要涉及到更多的数据,那和fork无关,不再多说,主要要记住程序寄存器pc指出程序当前已经执行到哪里,是进程上下文的重要内容,换出 CPU的进程要保存这个寄存器的值,换入CPU的进程,也要根据进程表中保存的本进程执行上下文信息,更新这个寄存器)。
好了,有这些概念打底,可以说fork了。当我们的的程序执行到下面的语句:
pid=fork();
操作系统创建一个新的进程(子进程),并且在进程表中相应为它建立一个新的表项。新进程和原有进程的可执行程序是同一个程序;上下文和数据,绝大部分就是原进程(父进程)的拷贝,但它们是两个相互独立的进程!此时程序寄存器pc,在父、子进程的上下文中都声称,这个进程目前执行到fork调用即将返回(此时子进程不占有CPU,子进程的pc不是真正保存在寄存器中,而是作为进程上下文保存在进程表中的对应表项内)。问题是怎么返回,在父子进程中就分道扬镳。
父进程继续执行,操作系统对fork的实现,使这个调用在父进程中返回刚刚创建的子进程的pid(一个正整数),所以下面的if语句中pid<0, pid==0的两个分支都不会执行。所以输出i am the parent process...
子进程在之后的某个时候得到调度,它的上下文被换入,占据 CPU,操作系统对fork的实现,使得子进程中fork调用返回0。所以在这个进程(注意这不是父进程了哦,虽然是同一个程序,但是这是同一个程序的另外一次执行,在操作系统中这次执行是由另外一个进程表示的,从执行的角度说和父进程相互独立)中pid=0。这个进程继续执行的过程中,if语句中pid<0不满足,但是pid==0是true。所以输出 i am the child process...
我想大家看到这里比较困惑的就是,为什么看上去程序中互斥的两个分支都被执行了。在一个程序的一次执行中,这当然是不可能的;但是你看到的两行输出是来自两个进程,这两个进程来自同一个程序的两次执行。
明白了吗?明白了就回帖哦……
【推荐】Linux经典书籍下载总汇
linux开机自动挂载Windows分区
先编辑/ect/fstab文件:
程序代码
我自己的内同如下:
程序代码LABEL=/ / ext3 defaults 1 1
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
LABEL=SWAP-hda8 swap swap defaults 0 0
/dev/hda1 /media/c vfat defaults 0 0
/dev/hda5 /media/d vfat defaults 0 0
/dev/hda6 /media/e vfat defaults 0 0
最后三行是我自己添加上去的,Linux开机时,会自动加载这几个文件的内容。所以,我们需要把Windows下的分区添加上去。我分别把Windows下的C盘,D盘,E盘挂载到了Linux下的/media/c,/media/d,/media/e三个文件夹下。C,D,E三个分区的文件系统格式是FAT32。所以就这样写了……参照你自己的分区情况添加吧。后面的就写defaults 和两个0就可以了。
如果你的是NTFS分区,参照这里的说明:
http://www.qqread.com/linux/2008/05/u412183.html
LINUX下的网络电视Sopcast安装向导……
这是我在网上找到的,大家看看吧……稍微的英语基础都能看懂的。
Sopcast官方网站:http://www.sopcast.cn
Sopcast
This guide will help you install sopcast on Ubuntu 7.10 Gutsy. It will also help you get a special modified version of the GUI running and setup firefox to send sop:// links to the program.
Installing packages
Make sure you have all universe and multiverse repositories switched on. Then, in terminal:
sudo apt-get install qt3-apps-dev vlc build-essential
Downloading the latest SopCast binary
Sopcast ix86 binary
Unzip it and cd into that directory using terminal. Then run:
sudo cp sp-sc-auth /usr/bin/sp-sc
Downloading and building the latest GUI
Download this specially modified source package. I have added URL handling.
RKMOD version of QSopCast
Again, unzip it and cd into that (src) directory using terminal. Then run
sudo qmake
sudo make
sudo make install
This should compile the source and install the binary into the correct location.
Creating a menu shortcut
Go to System / Preferences / Main Menu... then 'Internet' and 'Add New Item'. Give it the name "QSopCast" and command "qsopcast". You should now be able to launch from the main menu.
Setting up the GUI
Once the gui is open, goto config then config again. Make sure that the player settings are all set to "vlc" and that the channel URL is set to "http://www.sopcast.com/gchlxml"
You should now be able to watch sop casts by selecting a channel, launching it and then hitting player when the stream is at 100%
Firefox sop:// URLS
Go into firefox and enter URL: "about:config". Right click, select new and string. The string name is "network.protocol-handler.app.sop" and the value is "qsopcast". It should now sent sops to the modified version of QSopCast ready to be launched.
linux下去掉终端烦人的嗡鸣声……
每次在什么命令都没有的时候按Backspace键就会有嗡鸣声,是不是特别烦?教你一个办法……
执行这样一条命令:
程序代码
如果不行就
程序代码
再不行就
程序代码
总有一条是可以的,如果解决了,别忘了谢谢我哦……呵呵……

















