如何在运行时重新编译c++文件

how to recompile a C++ file at runtime?

本文关键字:编译 c++ 文件 新编译 运行时      更新时间:2023-10-16

Update:我最终通过使用dll并加载和卸载它们来完成这项工作。https://www.youtube.com/watch?v=mFSv0tf6Vwc

我知道这是可能的,因为我看过关于这个的帖子,但我真的不理解他们。

所以我有类(DetailsLayout)调用另一个类(组件)的方法。在运行时,我更改组件的内容,将用户创建的另一个组件添加到该方法中。我想重新编译DetailsLayout.cpp和Components.h,但我很困惑,如何去做这个。

现在我正在尝试这个,因为这篇文章:使用g++编译多个。cpp和。h文件

system(("g++ -c ProjectComponents.hpp").c_str());
system(("g++ -c DetailsLayout.cpp").c_str());
DetailsLayout::CreateMenu();

我得到一个错误,说g++不被识别为内部或外部命令。

根据Jesper的建议,我会提到我的最终目标是什么。所以现在在我的游戏引擎中,我允许用户动态地向场景中的对象添加组件(我制作的)。当我试图使它,以便"用户"可以使一个组件,并动态添加它,我不能这样做,除非我编译。h和。cpp文件我为他们。如果我手动将文件包含到我的项目中,并运行添加类的方法,它可以工作,但我希望当我单击编译按钮时发生这种情况。

我的组件都继承自这个类。

    class Component
{
public:
    Component();
    ~Component();
    virtual bool Initialize() { return true; }
    virtual bool Update(float dt) { dt; return true; }
    virtual bool Draw() { return true; }
    template <class T> T* GetSiblingComponent()
    {
        return m_owner->GetComponentByType<T>();
    }
protected:
    Entity* m_owner;
    char    m_name[Imgn::MAX_NAME_LEN];
    bool    m_enabled;
};

我得到一个错误,说g++不被识别为内部或外部命令。

不能保证GCC安装在您的目标机器上。如果您想在任意主机上编译和运行您的代码,您必须首先确保这一点。

您似乎也错过了链接阶段,并调用结果可执行文件