用g++编译单个源文件myprog.cc很简单,只要把文件名当参数传给g++就行了。
$ g++ myprog.cc
$ ls -l
-rwxr-xr-x 1 wvh users 13644 Oct 5 16:17 a.out
-rw-r--r-- 1 wvh users 220 Oct 5 16:17 myprog.cc
默认情况下,UNIX和LINUX操作系统生成的目标文件是当前目录下的a.out,只要输入./a.out就可以执行。在Cygwin系统下,你得到的是a.exe,通过输入./a或者./a.exe都可以执行。
要定义g++的输出文件名,使用-o选项如下所示:
$ g++ myprog.cc -o runme
$ ls -l
-rw-r--r-- 1 wvh users 220 Oct 5 16:17 myprog.cc
-rwxr-xr-x 1 wvh users 13644 Oct 5 16:28 runme
如果编译多个源文件,只要在命令行里列出它们就行了,如下所示,最终产生的输出文件是showdate:
$ g++ showdate.cc helper.cc –o showdate
如果你想先编译这些源文件,最后再把它们链接成一个2进制文件,可以用-c选项,那么g++就只产生object文件,如下所示:
$ g++ -c showdate.cc
$ g++ -c helper.cc
$ g++ showdate.o helper.o –o showdate
$ ls -l
total 124
-rw-r--r-- 1 wvh users 210 Oct 5 12:42 helper.cc
-rw-r--r-- 1 wvh users 45 Oct 5 12:29 helper.h
-rw-r--r-- 1 wvh users 1104 Oct 5 13:50 helper.o
-rwxr-xr-x 1 wvh users 13891 Oct 5 13:51 showdate
-rw-r--r-- 1 wvh users 208 Oct 5 12:44 showdate.cc
-rw-r--r-- 1 wvh users 1008 Oct 5 13:50 showdate.o
注意
所有的GCC编译器都是通过文件的后缀名来判断文件类型的,然后选择应该进行的操作(比如,后缀名为.o的文件只需要进行链接),文件类型到操作的映射记录在GCC的specs文件里。在GCC版本4以前,specs文件是标准文本文件,可以用任何文本编辑器修改;但是GCC版本4以后specs文件是内建文件,必须要进行解压才能修改。
很显然,当你的项目文件稍微多点,使用命令行来编译就不可接受了,特别是还要加上搜索目录、优化选项和其他g++选项。解决的方案就是make,不过本文并不讨论它。