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