2011-05-25 145 views
1

將多個文件編譯在一起?

  • Data.cpp
  • Data.h
  • User.cpp
  • User.h
  • 的main.cpp

Main.cpp的需要data.cpp和user.cpp。我如何鏈接或編譯它們?他們都在同一個目錄? (請更具體一些,比如先編譯哪個文件。)

我的系統是:Mac OS X,終端中的g ++編譯器。

+1

爲什麼不使用Xcode?或者makefile?不要直接使用命令行來編譯更大的C++項目。 – 2011-05-25 14:33:02

+0

Xcode只在Mac上,但我需要運行它(演示)在Linux :( – 2011-05-25 14:37:38

+0

而且,Xcode給了我的問題:http://stackoverflow.com/questions/5284468/android-source-code-build-problem – 2011-05-25 14:44:03

回答

2

最簡單的方法:

g++ Data.cpp User.cpp main.cpp 

更先進的方法:用一個makefile

+0

如何使用makefile? – 2011-05-25 14:35:37

+0

@ cpp_noob:這是你今天的作業,你會弄明白的 – tgmath 2011-05-25 14:37:11

+0

@cpp_noob選擇一個makefile教程,例如:http://www.opussoftware.com/tutorial/TutMakefile.htm – 2011-05-25 14:39:15

0

我猜你是說明事物以錯誤的方式:

Main.cpp需要user.cpp:他只需要在user.cpp實現的類型定義。這就是爲什麼你只需要在Main.cpp中包含user.h

通常情況下,每.cpp文件變成自己的翻譯單元,並給予不同的對象文件。這些文件在鏈接進程發生時進行彙編。

基本上,步驟是:

  1. 對於每一個源文件(.cpp),則生成一個對象文件(編譯)。
  2. 將這些目標文件組裝到生成的二進制文件(鏈接)中。

通常,人們使用類似Makefile或甚至更好的工具:SConstruct來自動執行這些步驟。

SConstruct很好,因爲它在編譯之前也會解析源文件並構建依賴關係樹,以確保一切順利。

+0

'SConstruct'實際上工作嗎?我已經嘗試了幾個這樣的系統(例如'Jam'),並且迄今爲止,唯一已經工作的是舊的make,並且有創建依賴關係的規則。 – 2011-05-25 16:55:10

1

編譯每一個seperately到目標文件。 然後將目標文件鏈接到應用程序。

+0

如何鏈接到一個應用程序? – 2011-05-25 14:35:46

+0

看看Eser的答案。或者使用您選擇的鏈接器。 GNU-Linker ld也許是最常見的。 – Hyperboreus 2011-05-25 14:39:41

0

的最快方法是

g++ main.cpp Data.cpp User.cpp -o program_name 
2

試試這個:

g++ main.cpp Data.cpp User.cpp -o myexecutable 

所有源文件編譯單獨的,所以順序並不重要。編譯之後,g ++也會進行鏈接。