1 what about g++?
g++是GNU组织推出的C++编译器。它不但可以用来编译传统的C++程序,也可以用来编译现代C++,比如C++11/14等。
g++的基本语法格式如下:
g++ [选项] 准备编译的文件 [选项] [目标文件]
2 如何编译文件?
2.1 单个文件
如果只有单个文件main.cpp
g++ main.cpp -o main
或
g++ -o main main.cpp
也就是-o main写在前后或者后面都可以,-o生成文件的名称可以随意定义,不要求与cpp相同。
2.2 多个文件,且在同一个目录
各个文件的代码如下
main.cpp
#include "add.hpp"
#include "iostream"
#include "multi.hpp"
using namespace std;
int main(int argc, char** argv) {
int a, b;
a = 10;
b = 13;
std::cout << "a + b = " << add(a, b) << endl;
std::cout << "a * b = " << multi(a, b) << endl;
return 0;
}
add.cpp
#include "add.hpp"
int add(int a, int b) {
int ret;
ret = a + b;
return (a + b);
}
add.hpp
int add(int a, int b);
multi.cpp
#include "multi.hpp"
int multi(int a, int b) {
int ret;
ret = a * b;
return ret;
}
multi.hpp
int multi(int a, int b);
编译方法如下:
g++ main.cpp add.cpp multi.cpp -o main
或
g++ main.cpp add.cpp add.hpp multi.cpp multi.hpp -o main
也就是说*.hpp的文件不要求指定,相应的cpp文件会根据include进行查找,但是*.cpp是必须要指定的,下面的方法就是错误的。
g++ main.cpp add.hpp multi.hpp -o main
报错的信息如下,提示找不到相应的*.cpp文件。
2.3 多个文件在多个目录
将上述的5个文件放置到不同的文件夹
在main.cpp的目录使用上述的方式编译,就会报错,因为*.cpp和*.hpp被“藏”进了子文件夹,编译器就找不到了。
可以增加"-I"选项(大写的i)告诉编译器查找目录,如下
g++ main.cpp add.cpp multi.cpp -I./add -I./multi -o main
依然报错,提示*.cpp文件找不到。
于是可以在编译时,增加cpp的相对路径,这次就可以正常编译通过了。
g++ main.cpp add/add.cpp multi/multi.cpp -I./add -I./multi -o main
如果把“-I”的选项去掉呢?
g++ main.cpp add/add.cpp multi/multi.cpp -o main
果然报错了,报错信息如下,有找不到hpp文件了。
所以在多文件夹多文件编译时,一方面要通过“-I”指定头文件的搜索路径,另一方面指定cpp的路径。
3 附件
4 cite
[1] https://www.jianshu.com/p/2b047bcce8fa
[2] https://blog.csdn.net/lin_008/article/details/77600483