c++ - 使一个类可用于其他程序

标签 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 的答案)?

最佳答案

对我来说,这听起来像是您想从您的 World 类中创建一个库。库通常提供一堆类型、函数或变量,以链接到可执行文件或其他库或由其使用。

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

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

  • 公共(public)类型、函数和变量的声明
  • 使用库所需的 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)

只需使用 CMakeLists.txt 所在目录的路径运行 cmake 即可构建必要的 makefile,然后运行 ​​make,那么你应该完成了。


另见:

关于c++ - 使一个类可用于其他程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12482265/

相关文章:

c++ - 像 union_ 这样的 Boost.Geometry 操作如何处理浮点类型的基本不精确性?

c++ - 如何让 Fortran 指针在 C++ 中穿行

java - 如何创建一个单独的类来处理 android 常见任务,例如创建进度对话框?

javascript - 使用 BeautifulSoup 进行网页抓取不起作用

linux - 链接器在传递给它的目标文件上删除字符?

c++ - 结构构造函数语法

java - 如何动态创建类/类型并将其传递给 Map?

c++ - 避免 unix 中的标准库冲突

c++ - 为什么 ios::app (append) 在 C++ 中不起作用?

c++ - 我应该如何在包含的类对象中访问容器类的函数