使一个类可用于其他程序

时间:2012-09-18 17:44:49

标签: c++ class gcc compilation include

我正在用C ++构建一个演化模拟器,但不是一个“真正的”可运行程序,而是一个其他程序应该#include的类。这个名为World的类有一些功能,例如update()getInfo()等......

我在这里遇到两个问题。首先,我不知道我应该如何编译该类,以及我应该为哪些文件提供用户程序(#include类)。显然,该程序应该收到.hpp文件,但还有什么?类World的目标文件?这意味着我需要使用g++ World.o user.o -o user语法编译用户程序,但有没有办法避免这样做(在我的编译命令中提到World.o)?我也不需要在编译命令中包含iostream.o

第二个问题是World#include其他一些类,例如Organism,它们必须按顺序包含Block类继承它。如何编译此代码以获取单个World.o文件(如果这是问题1的答案)?

3 个答案:

答案 0 :(得分:3)

对我来说,听起来你想要从你的World课程中建立一个图书馆。库通常提供一组类型或函数或变量,以链接到可执行文件或其他库。

库通常由公共接口其余(内部,实现细节)组成。前者进入库头文件,梯形图进入其他头文件或实现文件。

接口定义包含库的潜在用户需要使用的所有内容。不多也不少。也就是说,

  • 公共类型,函数和变量的声明
  • 使用库
  • 所需的typedef
  • 文档
  • ...

如果用户只需要与World进行交互,而不需要与任何Organism进行交互,则此类不会进入库标题,而是仅包含在相关的实现文件中。实现本身可以分成不同的文件。由链接器来适当地组合这些。


当涉及大量文件和库时,手动定义构建配置可能会非常麻烦。好的,有自动生成这个的工具。 例如cmake。示例cmake配置文件可能如下所示:

# CMakeLists.txt

# add a shared library to build configuration
add_library(my_library_name SHARED my_library_file1.cpp my_library_file2.cpp)

# add an executable to build configuration
add_executable(my_executable_name executable_file1.cpp executable_file2.cpp)

# link the library to the executable
target_link_libraries(my_executable_name my_library_name)

只需运行cmake以及CMakeLists.txt所在目录的路径来构建必要的makefile,然后运行make,那么就应该完成。


另见:

答案 1 :(得分:1)

您应该拥有一组代码用户需要使用的头文件。其他所有东西都应编译成一个库供他们使用,以便他们在代码中包含一组标题并链接到库。

答案 2 :(得分:1)

您可以创建静态或共享库。 http://www.adp-gmbh.ch/cpp/gcc/create_lib.html