@@ -91,27 +91,37 @@ fs::path project_root_dir_{""};
9191fs::path project_build_dir_{" _internal" };
9292
9393// Internal
94- std::unique_ptr<CLI::App> app_;
95- CLI::App *toolchain_{nullptr };
96- CLI::App *target_{nullptr };
94+ // std::unique_ptr<CLI::App> app_;
95+ // CLI::App *toolchain_{nullptr};
96+ // CLI::App *target_{nullptr};
97+
98+ struct ArgsInstance {
99+ CLI::App app_{" BuildCC Buildsystem" };
100+ CLI::App *toolchain_{nullptr };
101+ CLI::App *target_{nullptr };
102+ };
103+
104+ std::unique_ptr<ArgsInstance> args_instance_;
97105
98106}// namespace
99107
100108namespace buildcc {
101109
102110void Args::Init () {
103- if (!app_) {
104- app_ = std::make_unique<CLI::App>(" BuildCC buildsystem" );
105- toolchain_ =Ref ().add_subcommand (kToolchainSubcommand ,kToolchainDesc );
106- target_ =Ref ().add_subcommand (kTargetSubcommand ,kTargetDesc );
111+ if (!args_instance_) {
112+ args_instance_ = std::make_unique<ArgsInstance>();
113+ args_instance_->toolchain_ =
114+ Ref ().add_subcommand (kToolchainSubcommand ,kToolchainDesc );
115+ args_instance_->target_ =
116+ Ref ().add_subcommand (kTargetSubcommand ,kTargetDesc );
107117RootArgs ();
108118 }
109119}
110120
111- void Args::Deinit () {app_ .reset (nullptr ); }
121+ void Args::Deinit () {args_instance_ .reset (nullptr ); }
112122
113- CLI::App &Args::Ref () {return * app_; }
114- const CLI::App &Args::ConstRef () {return * app_; }
123+ CLI::App &Args::Ref () {return args_instance_-> app_ ; }
124+ const CLI::App &Args::ConstRef () {return args_instance_-> app_ ; }
115125
116126bool Args::Clean () {return clean_; }
117127env::LogLevelArgs::GetLogLevel () {return loglevel_; }
@@ -121,6 +131,7 @@ const fs::path &Args::GetProjectBuildDir() { return project_build_dir_; }
121131
122132void Args::AddToolchain (const std::string &name,const std::string &description,
123133 ArgToolchain &out,const ArgToolchain &initial) {
134+ CLI::App *toolchain_ = args_instance_->toolchain_ ;
124135env::assert_fatal (toolchain_ !=nullptr ,
125136" Initialize Args using the Args::Init API" );
126137 CLI::App *t_user =
@@ -146,6 +157,7 @@ void Args::AddToolchain(const std::string &name, const std::string &description,
146157
147158void Args::AddTarget (const std::string &name,const std::string &description,
148159 ArgTarget &out,const ArgTarget &initial) {
160+ CLI::App *target_ = args_instance_->target_ ;
149161env::assert_fatal (target_ !=nullptr ,
150162" Initialize Args using the Args::Init API" );
151163 CLI::App *target_user =