linux下编译C++⽂件基本命令
⼀个C/C++源代码要变成⼀个可执⾏⽂件,需要经过预处理(Pre-processing)-编译(Compiling)-汇编(Assembling)-链接(Link)基本流程为:
test.c --预处理--test.i --编译-- test.s --汇编-- test.o --链接--
预处理
-E 选项使⽤g++/gcc将源代码预处理后不执⾏其他动作。
下⾯的命令将test.cpp预处理,并在标准输出中显⽰:
g++ -E test.cpp
后⾯加上 -o 选项表⽰将源代码预处理后输出在指定⽂件中,⽐如test.i:
g++ -E test.cpp -o test.i
编译
-S 选项使⽤g++/gcc将预处理后的⽂件编译,翻译成汇编代码。只编译不汇编
下⾯的命令将会编译test.i⽂件,并⾃动在当前⽂件夹⽣成test.s⽂件
g++ -S test.i
若要指定其他输出名,则需 -o 指定,⽐如⽣成名为xxx.s的汇编代码⽂件
g++ -S test.i -o xxx.s
汇编
-c 选项将编译⽣成的test.s⽂件⽣成⼆进制⽬标代码
下⾯的命令将在当前⽂件夹⾃动⽣成test.o的⼆进制⽬标代码⽂件
g++ -c test.s
如果要指定输出⽂件名,则需 -o 指定,⽐如⽣成xxx.o的⼆进制⽬标代码⽂件
g++ -c test.s -o xxx.o
链接
链接阶段是将相关的⽬标⽂件链接起来,形成⼀个整体,⽣成可执⾏⽂件
⽆选项链接
下⾯的命令会把⼆进制⽬标⽂件test.o所需的相关⽂件链接成⼀个整体,并在当前⽂件夹⾃动⽣成⼀个名为a.out的可执⾏⽂件
g++ test.o
如果要执⾏这个可执⾏⽂件,需要输⼊命令
./a.out
当然也可以指定⽣成的可执⾏⽂件的⽂件名
g++ test.o -
单个源⽂件直接⽣成可执⾏⽂件
当然g++/gcc也可以直接把源代码直接⽣成可执⾏⽂件
下⾯的命令将test.cpp直接在当前⽂件夹⽣成a.out可执⾏⽂件,若要指定⽂件名,可使⽤ -o 选项
g++ test.cpp
g++ test.cpp -
多个源⽂件直接⽣成可执⾏⽂件
也可以将多个源代码编译链接成⼀个可执⾏⽂件
下⾯的命令将test.cpp直接在当前⽂件夹⽣成a.out可执⾏⽂件,若要指定⽂件名,可使⽤ -o 选项
g++ test1.cpp test2.cpp
g++ test1.cpp test2.cpp -
⼀个C/C++源代码要变成⼀个可执⾏⽂件,需要经过预处理(Pre-processing)-编译(Compiling)-汇编(Assembling)-链接(Link)基本流程为:
linux下gcc编译的四个步骤test.c --预处理--test.i --编译-- test.s --汇编-- test.o --链接--
预处理
-E 选项使⽤g++/gcc将源代码预处理后不执⾏其他动作。
下⾯的命令将test.cpp预处理,并在标准输出中显⽰:
g++ -E test.cpp
后⾯加上 -o 选项表⽰将源代码预处理后输出在指定⽂件中,⽐如test.i:
g++ -E test.cpp -o test.i
编译
-S 选项使⽤g++/gcc将预处理后的⽂件编译,翻译成汇编代码。只编译不汇编
下⾯的命令将会编译test.i⽂件,并⾃动在当前⽂件夹⽣成test.s⽂件
g++ -S test.i
若要指定其他输出名,则需 -o 指定,⽐如⽣成名为xxx.s的汇编代码⽂件
g++ -S test.i -o xxx.s
汇编
-
c 选项将编译⽣成的test.s⽂件⽣成⼆进制⽬标代码
下⾯的命令将在当前⽂件夹⾃动⽣成test.o的⼆进制⽬标代码⽂件
g++ -c test.s
如果要指定输出⽂件名,则需 -o 指定,⽐如⽣成xxx.o的⼆进制⽬标代码⽂件
g++ -c test.s -o xxx.o
链接
链接阶段是将相关的⽬标⽂件链接起来,形成⼀个整体,⽣成可执⾏⽂件
⽆选项链接
下⾯的命令会把⼆进制⽬标⽂件test.o所需的相关⽂件链接成⼀个整体,并在当前⽂件夹⾃动⽣成⼀个名为a.out的可执⾏⽂件
g++ test.o
如果要执⾏这个可执⾏⽂件,需要输⼊命令
./a.out
当然也可以指定⽣成的可执⾏⽂件的⽂件名
g++ test.o -
单个源⽂件直接⽣成可执⾏⽂件
当然g++/gcc也可以直接把源代码直接⽣成可执⾏⽂件
下⾯的命令将test.cpp直接在当前⽂件夹⽣成a.out可执⾏⽂件,若要指定⽂件名,可使⽤ -o 选项
g++ test.cpp
g++ test.cpp -
多个源⽂件直接⽣成可执⾏⽂件
也可以将多个源代码编译链接成⼀个可执⾏⽂件
下⾯的命令将test.cpp直接在当前⽂件夹⽣成a.out可执⾏⽂件,若要指定⽂件名,可使⽤ -o 选项
g++ test1.cpp test2.cpp
g++ test1.cpp test2.cpp -
使⽤C++11标准编译
如果要使⽤C++11版本特性,则需要使⽤ -std=c++11 选项g++ -std=c++11 test.cpp -
待续。