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