2011-05-25 130 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 ++也会进行链接。