以下面一段代码为例:
/* helloworld.cpp */ #include <iostream> int main(int argc,char *argv[]) { std::cout << "hello, world" << std::endl; return(0); }
直接编译出可执行文件 g++ helloworld.cpp -o helloworld
执行: ./helloworld
我们也可以将cpp源文件分步编译,编译步骤:
选项 -E 使 g++ 将源代码用编译预处理器处理后不再执行其他动作。$ gcc -E helloworld.cpp -o helloworld.i
本文前面所列出的 helloworld.cpp 的源代码,仅仅有六行,而且该程序除了显示一行文字外什么都不做,但是,预处理后的版本将超过 1200 行。
这主要是因为头文件 iostream 被包含进来,而且它又包含了其他的头文件,除此之外,还有若干个处理输入和输出的类的定义。
生成汇编代码
选项 -S 指示编译器将程序编译成汇编语言,输出汇编语言代码而後结束。下面的命令将由 C++ 源码文件生成汇编语言文件 helloworld.s
如:$ g++ -S helloworld.cpp -o helloworld.s
选项 -c 用来告诉编译器编译源代码但不要执行链接,输出结果为对象文件。
g++ -c hellospeak.cpp -o hellospeak.o
PS:这里说一下为什么在命令中没有提到头文件(如果有的话)
原因是:在“.cpp“中包含有”#include"xxx.h"“这句代码,它的意思是搜索系统头文件目录之前将先在当前目录中搜索文件“xxx.h“。而”xxx.h“正在该目录中,不用再在命令中指定了。
头文件 使用编译选项-I参数来指定头文件路径(和源文件不在同一目录时)
g++ -c -I/home/path main.cpp -o main.o
-I/home/path 指定头文件路径(当头文件和cpp文件不在一个目录时)
库文件
g++ main.o -o exeProgram -L/home/path -lexample
-L/home/path -lexample 指定库文件的路径
在makefile文件中可以定义一个变量名来代替上面的路径
CXXFLAGS += -I/home/path
LDFLAGS += -L/home/path
g++ -c $(CXXFLAGS) main.cpp -o main.o