使一个类可用于其他程序

cor*_*zza 5 c++ gcc compilation class 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的答案)?

moo*_*eep 3

对我来说,这听起来像是你想在你的班级中建立一个图书馆World。库通常提供一堆类型、函数或变量,供可执行文件或其他库链接/使用。

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

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

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

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


当涉及大量文件和库时,手动定义构建配置可能会很麻烦。好东西,有工具可以自动生成它。例如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)
Run Code Online (Sandbox Code Playgroud)

只需cmake使用 所在目录的路径运行CMakeLists.txt以构建必要的 makefile,然后运行make,然后就可以完成。


也可以看看: