我正在用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的答案)?
答案 0 :(得分:3)
对我来说,听起来你想要从你的World
课程中建立一个图书馆。库通常提供一组类型或函数或变量,以链接到可执行文件或其他库。
库通常由公共接口和其余(内部,实现细节)组成。前者进入库头文件,梯形图进入其他头文件或实现文件。
接口定义包含库的潜在用户需要使用的所有内容。不多也不少。也就是说,
如果用户只需要与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