g++ 手動編譯程序

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章