Add generate-compile-flags as argument

- generate-compile-flags (or shorthand gcf), will generate a
  compile_flags.txt file based on the makegen.xml configuration.
- Fix IncludeDirExclDep not generating in the Makefile correctly
This commit is contained in:
Thraix
2026-05-12 21:49:47 +02:00
parent 736aae3d39
commit 577ac677db
8 changed files with 75 additions and 21 deletions
+1
View File
@@ -1,2 +1,3 @@
bin/*
.ycm_extra_conf.py
compile_flags.txt
+14 -11
View File
@@ -1,4 +1,4 @@
# This Makefile was generated using MakeGen v1.3.10 made by Tim Håkansson
# This Makefile was generated using MakeGen v1.3.12 made by Tim Håkansson
# and is licensed under MIT. Full source of the project can be found at
# https://gitea.timha.se/Thraix/MakeGen
CC=@g++
@@ -7,7 +7,7 @@ MKDIR_P=mkdir -p
BIN=bin/Release/
OBJPATH=$(BIN)intermediates
INCLUDES=
OBJECTS=$(OBJPATH)/src/ConfigCLI.o $(OBJPATH)/src/ConfigFile.o $(OBJPATH)/src/HFileGen.o $(OBJPATH)/src/IncludeDeps.o $(OBJPATH)/src/Makefile.o $(OBJPATH)/src/Utils.o $(OBJPATH)/src/compatibility/ConfigFileConf.o $(OBJPATH)/src/main.o $(OBJPATH)/src/xml/XML.o $(OBJPATH)/src/xml/XMLObject.o
OBJECTS=$(OBJPATH)/src/CompileFlags.o $(OBJPATH)/src/ConfigCLI.o $(OBJPATH)/src/ConfigFile.o $(OBJPATH)/src/HFileGen.o $(OBJPATH)/src/IncludeDeps.o $(OBJPATH)/src/Makefile.o $(OBJPATH)/src/Utils.o $(OBJPATH)/src/compatibility/ConfigFileConf.o $(OBJPATH)/src/main.o $(OBJPATH)/src/xml/XML.o $(OBJPATH)/src/xml/XMLObject.o
CFLAGS=$(INCLUDES) -std=c++17 -c
LIBDIR=
LDFLAGS=
@@ -34,29 +34,32 @@ $(OUTPUT): $(OBJECTS)
install: all
$(info Installing MakeGen to /usr/bin/)
@cp $(OUTPUT) /usr/bin/makegen
$(OBJPATH)/src/CompileFlags.o: src/CompileFlags.cpp src/CompileFlags.h src/ConfigFile.h src/ConfigUtils.h src/Common.h src/AssertException.h src/Dependency.h src/FlagData.h src/xml/XMLObject.h
$(info -[9%]- $<)
$(CC) $(CFLAGS) -o $@ $<
$(OBJPATH)/src/ConfigCLI.o: src/ConfigCLI.cpp src/Common.h src/AssertException.h src/ConfigCLI.h src/ConfigFile.h src/ConfigUtils.h src/Dependency.h src/FlagData.h src/xml/XMLObject.h src/FileUtils.h src/Utils.h
$(info -[10%]- $<)
$(info -[18%]- $<)
$(CC) $(CFLAGS) -o $@ $<
$(OBJPATH)/src/ConfigFile.o: src/ConfigFile.cpp src/ConfigFile.h src/ConfigUtils.h src/Common.h src/AssertException.h src/Dependency.h src/FlagData.h src/xml/XMLObject.h src/FileUtils.h src/Utils.h src/compatibility/ConfigFileConf.h src/xml/XML.h
$(info -[20%]- $<)
$(info -[27%]- $<)
$(CC) $(CFLAGS) -o $@ $<
$(OBJPATH)/src/HFileGen.o: src/HFileGen.cpp src/FileUtils.h src/Common.h src/AssertException.h src/Utils.h src/HFileGen.h src/ConfigFile.h src/ConfigUtils.h src/Dependency.h src/FlagData.h src/xml/XMLObject.h
$(info -[30%]- $<)
$(info -[36%]- $<)
$(CC) $(CFLAGS) -o $@ $<
$(OBJPATH)/src/IncludeDeps.o: src/IncludeDeps.cpp src/Common.h src/AssertException.h src/IncludeDeps.h src/ConfigFile.h src/ConfigUtils.h src/Dependency.h src/FlagData.h src/xml/XMLObject.h src/FileUtils.h src/Utils.h
$(info -[40%]- $<)
$(info -[45%]- $<)
$(CC) $(CFLAGS) -o $@ $<
$(OBJPATH)/src/Makefile.o: src/Makefile.cpp src/Common.h src/AssertException.h src/IncludeDeps.h src/ConfigFile.h src/ConfigUtils.h src/Dependency.h src/FlagData.h src/xml/XMLObject.h src/FileUtils.h src/Utils.h src/Makefile.h
$(info -[50%]- $<)
$(info -[54%]- $<)
$(CC) $(CFLAGS) -o $@ $<
$(OBJPATH)/src/Utils.o: src/Utils.cpp src/ConfigFile.h src/ConfigUtils.h src/Common.h src/AssertException.h src/Dependency.h src/FlagData.h src/xml/XMLObject.h src/FileUtils.h src/Utils.h
$(info -[60%]- $<)
$(info -[63%]- $<)
$(CC) $(CFLAGS) -o $@ $<
$(OBJPATH)/src/compatibility/ConfigFileConf.o: src/compatibility/ConfigFileConf.cpp src/Common.h src/AssertException.h src/xml/XMLObject.h src/compatibility/ConfigFileConf.h
$(info -[70%]- $<)
$(info -[72%]- $<)
$(CC) $(CFLAGS) -o $@ $<
$(OBJPATH)/src/main.o: src/main.cpp src/Common.h src/AssertException.h src/ConfigCLI.h src/ConfigFile.h src/ConfigUtils.h src/Dependency.h src/FlagData.h src/xml/XMLObject.h src/HFileGen.h src/Makefile.h src/Timer.h src/Utils.h
$(info -[80%]- $<)
$(OBJPATH)/src/main.o: src/main.cpp src/Common.h src/AssertException.h src/CompileFlags.h src/ConfigFile.h src/ConfigUtils.h src/Dependency.h src/FlagData.h src/xml/XMLObject.h src/ConfigCLI.h src/HFileGen.h src/Makefile.h src/Timer.h src/Utils.h
$(info -[81%]- $<)
$(CC) $(CFLAGS) -o $@ $<
$(OBJPATH)/src/xml/XML.o: src/xml/XML.cpp src/xml/XML.h src/xml/XMLObject.h src/xml/XMLException.h
$(info -[90%]- $<)
+2 -1
View File
@@ -16,7 +16,7 @@
// Release, should be backwards compatible with any minor version
#define MAKEGEN_VERSION_RELEASE 3
// Minor changes, generally bug fixes
#define MAKEGEN_VERSION_MINOR 11
#define MAKEGEN_VERSION_MINOR 12
#define MAKEGEN_VERSION ("v" STR(MAKEGEN_VERSION_MAJOR) "." STR(MAKEGEN_VERSION_RELEASE) "." STR(MAKEGEN_VERSION_MINOR))
@@ -32,6 +32,7 @@ const static unsigned int FLAG_DEPENDENCY = BIT(8);
const static unsigned int FLAG_SIMPLE = BIT(9);
const static unsigned int FLAG_CONFIG = BIT(10);
const static unsigned int FLAG_TARGET = BIT(11);
const static unsigned int FLAG_GEN_COMP_FLAGS = BIT(12);
#define LOG_INFO(...) LogHelper(__VA_ARGS__)
#define LOG_WARNING(...) LogHelper(__VA_ARGS__)
+28
View File
@@ -0,0 +1,28 @@
#include "CompileFlags.h"
#include <fstream>
void CompileFlags::Save(ConfigFile& conf)
{
std::ofstream file{"compile_flags.txt"};
file << "-xc++" << std::endl;
file << "-std=" << conf.GetCppVersion() << std::endl;
const std::vector<std::string>& includeDirs = conf.GetIncludeDirs();
for (const auto& includeDir : includeDirs)
{
file << "-I" << includeDir << std::endl;
}
const std::vector<std::string>& includeDirExclDeps = conf.GetIncludeDirExclDeps();
for (const auto& includeDirExclDep : includeDirExclDeps)
{
file << "-I" << includeDirExclDep << std::endl;
}
const std::vector<std::string>& defines = conf.GetDefines();
for (const auto& defines : defines)
{
file << "-D" << defines << std::endl;
}
}
+9
View File
@@ -0,0 +1,9 @@
#pragma once
#include "ConfigFile.h"
class CompileFlags
{
public:
static void Save(ConfigFile& conf);
};
+1
View File
@@ -78,6 +78,7 @@ void ConfigFile::Init(const FlagData& flagData)
InitOptionalDir(sourceDir);
InitDirs(libraryDirs);
InitDirs(includeDirs);
InitDirs(includeDirExclDeps);
}
void ConfigFile::InitTarget(const FlagData& flagData)
+1 -1
View File
@@ -46,7 +46,7 @@ void Makefile::Save(ConfigFile& conf, unsigned int flags)
const std::vector<std::string>& includeDirExclDeps = conf.GetIncludeDirExclDeps();
for (const auto& includeDirExclDep : includeDirExclDeps)
{
outputFile << "-I " << includeDirExclDeps << " ";
outputFile << "-I " << includeDirExclDep << " ";
}
outputFile << std::endl;
outputFile << "OBJECTS=";
+19 -8
View File
@@ -5,6 +5,7 @@
#include <thread>
#include "Common.h"
#include "CompileFlags.h"
#include "ConfigCLI.h"
#include "ConfigFile.h"
#include "FlagData.h"
@@ -44,6 +45,8 @@ Usage: makegen [options]
(no --jobs=X flag)
--simple Creates a simple Makefile without include dependencies
--target=<target> Run the makegen.xml file with the specified target
gcf, generate-compile-flags
Generates a Makefile and runs
If no option is given it will run "make all"
@@ -103,6 +106,10 @@ FlagData ReadFlags(int argc, char** argv)
{
flagData.flags |= FLAG_SINGLE_THREAD;
}
else if (flag == "gcf" || flag == "generate-compile-flags")
{
flagData.flags |= FLAG_GEN_COMP_FLAGS;
}
else if (flag == "--simple")
{
flagData.flags |= FLAG_SIMPLE;
@@ -204,18 +211,22 @@ int Run(int argc, char** argv)
{
return ConfigCLI::Main(argc - 1, &argv[1]);
}
std::map<std::string, ConfigFile> files{};
auto conf = ConfigFile::GetConfigFile("./", flagData);
if (conf)
{
bool success = MakeGen("./", flagData, *conf);
return success ? 0 : 1;
}
else
if (!conf.has_value())
{
LOG_ERROR("Couldn\'t load config file");
return 1;
}
return 0;
if (flagData.flags & FLAG_GEN_COMP_FLAGS)
{
CompileFlags::Save(conf.value());
return 0;
}
bool success = MakeGen("./", flagData, conf.value());
return success ? 0 : 1;
}
int main(int argc, char** argv)