Fix project compilation failure
- Fix project compilation failure when the project contains two files with the same name, causing the intermediate file to be in the same directory with the same name - Fix small print errors in makegen --help
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# This Makefile was generated using MakeGen v1.3.6 made by Tim Håkansson
|
||||
# This Makefile was generated using MakeGen v1.3.7 made by Tim Håkansson
|
||||
# and is licensed under MIT. Full source of the project can be found at
|
||||
# https://github.com/Thraix/MakeGen
|
||||
CC=@g++
|
||||
@@ -7,7 +7,7 @@ MKDIR_P=mkdir -p
|
||||
BIN=bin/
|
||||
OBJPATH=$(BIN)intermediates
|
||||
INCLUDES=
|
||||
OBJECTS=$(OBJPATH)/ConfigCLI.o $(OBJPATH)/ConfigFile.o $(OBJPATH)/HFileGen.o $(OBJPATH)/IncludeDeps.o $(OBJPATH)/Makefile.o $(OBJPATH)/Utils.o $(OBJPATH)/ConfigFileConf.o $(OBJPATH)/main.o $(OBJPATH)/XML.o $(OBJPATH)/XMLObject.o
|
||||
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
|
||||
CFLAGS=$(INCLUDES) -std=c++17 -c
|
||||
LIBDIR=
|
||||
LDFLAGS=
|
||||
@@ -15,51 +15,52 @@ LIBS=$(LIBDIR)
|
||||
OUTPUT=$(BIN)makegen
|
||||
.PHONY: all directories rebuild clean run
|
||||
all: directories $(OUTPUT)
|
||||
directories: $(BIN) $(OBJPATH)
|
||||
$(BIN):
|
||||
$(info Creating output directories)
|
||||
@$(MKDIR_P) $(BIN)
|
||||
$(OBJPATH):
|
||||
@$(MKDIR_P) $(OBJPATH)
|
||||
directories: $(OBJPATH)/src $(OBJPATH)/src/compatibility $(OBJPATH)/src/xml
|
||||
$(OBJPATH)/src:
|
||||
@$(MKDIR_P) $@
|
||||
$(OBJPATH)/src/compatibility:
|
||||
@$(MKDIR_P) $@
|
||||
$(OBJPATH)/src/xml:
|
||||
@$(MKDIR_P) $@
|
||||
run: all
|
||||
@./$(OUTPUT)
|
||||
rebuild: clean all
|
||||
clean:
|
||||
$(info Removing intermediates)
|
||||
rm -rf $(OBJPATH)/*.o
|
||||
$(info Removing $(OBJPATH))
|
||||
@rm -rf $(OBJPATH)/
|
||||
$(OUTPUT): $(OBJECTS)
|
||||
$(info Generating output file)
|
||||
$(info Generating output file $(OUTPUT))
|
||||
$(CO) $(OUTPUT) $(OBJECTS) $(LDFLAGS) $(LIBS)
|
||||
install: all
|
||||
$(info Installing MakeGen to /usr/bin/)
|
||||
@cp $(OUTPUT) /usr/bin/makegen
|
||||
$(OBJPATH)/ConfigCLI.o : src/ConfigCLI.cpp src/Common.h src/ConfigCLI.h src/ConfigFile.h src/ConfigUtils.h src/FileUtils.h src/Utils.h src/FlagData.h src/xml/XMLObject.h
|
||||
$(OBJPATH)/src/ConfigCLI.o: src/ConfigCLI.cpp src/Common.h src/ConfigCLI.h src/ConfigFile.h src/ConfigUtils.h src/FileUtils.h src/Utils.h src/FlagData.h src/xml/XMLObject.h
|
||||
$(info -[10%]- $<)
|
||||
$(CC) $(CFLAGS) -o $@ $<
|
||||
$(OBJPATH)/ConfigFile.o : src/ConfigFile.cpp src/ConfigFile.h src/ConfigUtils.h src/Common.h src/FileUtils.h src/Utils.h src/FlagData.h src/xml/XMLObject.h src/compatibility/ConfigFileConf.h src/xml/XML.h
|
||||
$(OBJPATH)/src/ConfigFile.o: src/ConfigFile.cpp src/ConfigFile.h src/ConfigUtils.h src/Common.h src/FileUtils.h src/Utils.h src/FlagData.h src/xml/XMLObject.h src/compatibility/ConfigFileConf.h src/xml/XML.h
|
||||
$(info -[20%]- $<)
|
||||
$(CC) $(CFLAGS) -o $@ $<
|
||||
$(OBJPATH)/HFileGen.o : src/HFileGen.cpp src/FileUtils.h src/Common.h src/Utils.h src/HFileGen.h src/ConfigFile.h src/ConfigUtils.h src/FlagData.h src/xml/XMLObject.h
|
||||
$(OBJPATH)/src/HFileGen.o: src/HFileGen.cpp src/FileUtils.h src/Common.h src/Utils.h src/HFileGen.h src/ConfigFile.h src/ConfigUtils.h src/FlagData.h src/xml/XMLObject.h
|
||||
$(info -[30%]- $<)
|
||||
$(CC) $(CFLAGS) -o $@ $<
|
||||
$(OBJPATH)/IncludeDeps.o : src/IncludeDeps.cpp src/Common.h src/IncludeDeps.h src/ConfigFile.h src/ConfigUtils.h src/FileUtils.h src/Utils.h src/FlagData.h src/xml/XMLObject.h
|
||||
$(OBJPATH)/src/IncludeDeps.o: src/IncludeDeps.cpp src/Common.h src/IncludeDeps.h src/ConfigFile.h src/ConfigUtils.h src/FileUtils.h src/Utils.h src/FlagData.h src/xml/XMLObject.h
|
||||
$(info -[40%]- $<)
|
||||
$(CC) $(CFLAGS) -o $@ $<
|
||||
$(OBJPATH)/Makefile.o : src/Makefile.cpp src/Common.h src/IncludeDeps.h src/ConfigFile.h src/ConfigUtils.h src/FileUtils.h src/Utils.h src/FlagData.h src/xml/XMLObject.h src/Makefile.h
|
||||
$(OBJPATH)/src/Makefile.o: src/Makefile.cpp src/Common.h src/IncludeDeps.h src/ConfigFile.h src/ConfigUtils.h src/FileUtils.h src/Utils.h src/FlagData.h src/xml/XMLObject.h src/Makefile.h
|
||||
$(info -[50%]- $<)
|
||||
$(CC) $(CFLAGS) -o $@ $<
|
||||
$(OBJPATH)/Utils.o : src/Utils.cpp src/ConfigFile.h src/ConfigUtils.h src/Common.h src/FileUtils.h src/Utils.h src/FlagData.h src/xml/XMLObject.h
|
||||
$(OBJPATH)/src/Utils.o: src/Utils.cpp src/ConfigFile.h src/ConfigUtils.h src/Common.h src/FileUtils.h src/Utils.h src/FlagData.h src/xml/XMLObject.h
|
||||
$(info -[60%]- $<)
|
||||
$(CC) $(CFLAGS) -o $@ $<
|
||||
$(OBJPATH)/ConfigFileConf.o : src/compatibility/ConfigFileConf.cpp src/ConfigFile.h src/ConfigUtils.h src/Common.h src/FileUtils.h src/Utils.h src/FlagData.h src/xml/XMLObject.h src/compatibility/ConfigFileConf.h
|
||||
$(OBJPATH)/src/compatibility/ConfigFileConf.o: src/compatibility/ConfigFileConf.cpp src/ConfigFile.h src/ConfigUtils.h src/Common.h src/FileUtils.h src/Utils.h src/FlagData.h src/xml/XMLObject.h src/compatibility/ConfigFileConf.h
|
||||
$(info -[70%]- $<)
|
||||
$(CC) $(CFLAGS) -o $@ $<
|
||||
$(OBJPATH)/main.o : src/main.cpp src/Common.h src/ConfigCLI.h src/ConfigFile.h src/ConfigUtils.h src/FileUtils.h src/Utils.h src/FlagData.h src/xml/XMLObject.h src/HFileGen.h src/Makefile.h src/Timer.h
|
||||
$(OBJPATH)/src/main.o: src/main.cpp src/Common.h src/ConfigCLI.h src/ConfigFile.h src/ConfigUtils.h src/FileUtils.h src/Utils.h src/FlagData.h src/xml/XMLObject.h src/HFileGen.h src/Makefile.h src/Timer.h
|
||||
$(info -[80%]- $<)
|
||||
$(CC) $(CFLAGS) -o $@ $<
|
||||
$(OBJPATH)/XML.o : src/xml/XML.cpp src/xml/XML.h src/xml/XMLObject.h src/xml/XMLException.h
|
||||
$(OBJPATH)/src/xml/XML.o: src/xml/XML.cpp src/xml/XML.h src/xml/XMLObject.h src/xml/XMLException.h
|
||||
$(info -[90%]- $<)
|
||||
$(CC) $(CFLAGS) -o $@ $<
|
||||
$(OBJPATH)/XMLObject.o : src/xml/XMLObject.cpp src/Common.h src/Utils.h src/xml/XMLException.h src/xml/XMLObject.h
|
||||
$(OBJPATH)/src/xml/XMLObject.o: src/xml/XMLObject.cpp src/Common.h src/Utils.h src/xml/XMLException.h src/xml/XMLObject.h
|
||||
$(info -[100%]- $<)
|
||||
$(CC) $(CFLAGS) -o $@ $<
|
||||
|
||||
+1
-1
@@ -19,5 +19,5 @@
|
||||
<srcdir>src/</srcdir>
|
||||
</configuration>
|
||||
<target>Release</target>
|
||||
<version>v1.3.5</version>
|
||||
<version>v1.3.7</version>
|
||||
</makegen>
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@
|
||||
// Release, should be backwards compatible with any minor version
|
||||
#define MAKEGEN_VERSION_RELEASE 3
|
||||
// Minor changes, generally bug fixes
|
||||
#define MAKEGEN_VERSION_MINOR 6
|
||||
#define MAKEGEN_VERSION_MINOR 7
|
||||
|
||||
#define MAKEGEN_VERSION ("v" STR(MAKEGEN_VERSION_MAJOR) "." STR(MAKEGEN_VERSION_RELEASE) "." STR(MAKEGEN_VERSION_MINOR))
|
||||
|
||||
|
||||
+35
-20
@@ -42,6 +42,7 @@ void Makefile::Save(ConfigFile& conf, unsigned int flags)
|
||||
{
|
||||
outputFile << "-I " << *it << " ";
|
||||
}
|
||||
|
||||
std::vector<std::string>& includedirsexcldep = conf.GetSettingVectorString(ConfigSetting::IncludeDirExclDep);
|
||||
for (auto it = includedirsexcldep.begin(); it != includedirsexcldep.end(); ++it)
|
||||
{
|
||||
@@ -51,9 +52,9 @@ void Makefile::Save(ConfigFile& conf, unsigned int flags)
|
||||
outputFile << "OBJECTS=";
|
||||
for (auto it = cppFiles.begin(); it != cppFiles.end(); ++it)
|
||||
{
|
||||
size_t extensionPos = it->find_last_of(".");
|
||||
size_t slash = it->find_last_of("/") + 1;
|
||||
outputFile << "$(OBJPATH)/" << it->substr(slash, extensionPos - slash) << ".o ";
|
||||
std::filesystem::path cppFile(*it);
|
||||
std::filesystem::path oFile = cppFile.replace_extension("o");
|
||||
outputFile << "$(OBJPATH)/" << oFile.string() << " ";
|
||||
}
|
||||
outputFile << std::endl;
|
||||
if (outputtype == "executable" || outputtype != "sharedlibrary")
|
||||
@@ -120,16 +121,20 @@ void Makefile::Save(ConfigFile& conf, unsigned int flags)
|
||||
outputFile << "all: directories $(OUTPUT)" << std::endl;
|
||||
|
||||
// Directories
|
||||
outputFile << "directories: $(BIN) $(OBJPATH)" << std::endl;
|
||||
std::set<std::string> intermediateDirectories = GetIntermediateDirectories(cppFiles);
|
||||
outputFile << "directories: ";
|
||||
for (const auto& intermediateDirectory : intermediateDirectories)
|
||||
{
|
||||
outputFile << intermediateDirectory << " ";
|
||||
}
|
||||
outputFile << std::endl;
|
||||
|
||||
// Bin path
|
||||
outputFile << "$(BIN):" << std::endl;
|
||||
outputFile << "\t$(info Creating output directories)" << std::endl;
|
||||
outputFile << "\t@$(MKDIR_P) $(BIN)" << std::endl;
|
||||
|
||||
// Object path
|
||||
outputFile << "$(OBJPATH):" << std::endl;
|
||||
outputFile << "\t@$(MKDIR_P) $(OBJPATH)" << std::endl;
|
||||
// Intermediate directories
|
||||
for (const auto& intermediateDirectory : intermediateDirectories)
|
||||
{
|
||||
outputFile << intermediateDirectory << ":" << std::endl;
|
||||
outputFile << "\t@$(MKDIR_P) $@" << std::endl;
|
||||
}
|
||||
|
||||
// Run
|
||||
outputFile << "run: all" << std::endl;
|
||||
@@ -150,12 +155,12 @@ void Makefile::Save(ConfigFile& conf, unsigned int flags)
|
||||
|
||||
// Clean
|
||||
outputFile << "clean:" << std::endl;
|
||||
outputFile << "\t$(info Removing intermediates)" << std::endl;
|
||||
outputFile << "\trm -rf $(OBJPATH)/*.o" << std::endl;
|
||||
outputFile << "\t$(info Removing $(OBJPATH))" << std::endl;
|
||||
outputFile << "\t@rm -rf $(OBJPATH)/" << std::endl;
|
||||
|
||||
// Output file
|
||||
outputFile << "$(OUTPUT): $(OBJECTS)" << std::endl;
|
||||
outputFile << "\t$(info Generating output file)" << std::endl;
|
||||
outputFile << "\t$(info Generating output file $(OUTPUT))" << std::endl;
|
||||
if (outputtype == "executable")
|
||||
outputFile << "\t$(CO) $(OUTPUT) $(OBJECTS) $(LDFLAGS) $(LIBS)" << std::endl;
|
||||
else
|
||||
@@ -175,11 +180,9 @@ void Makefile::Save(ConfigFile& conf, unsigned int flags)
|
||||
auto itD = dependencies.find(*it);
|
||||
if (itD == dependencies.end())
|
||||
{
|
||||
size_t extensionPos = it->find_last_of(".");
|
||||
size_t slash = it->find_last_of("/") + 1;
|
||||
std::string oFile = it->substr(slash, extensionPos - slash) + ".o ";
|
||||
|
||||
outputFile << "$(OBJPATH)/" << oFile << ":";
|
||||
std::filesystem::path cppFile(*it);
|
||||
std::filesystem::path oFile = cppFile.replace_extension("o");
|
||||
outputFile << "$(OBJPATH)/" << oFile.string() << ":";
|
||||
if (flags & FLAG_SIMPLE)
|
||||
{
|
||||
outputFile << " " << *it;
|
||||
@@ -195,3 +198,15 @@ void Makefile::Save(ConfigFile& conf, unsigned int flags)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::set<std::string> Makefile::GetIntermediateDirectories(const std::set<std::string>& cppFiles)
|
||||
{
|
||||
std::set<std::string> intermediateDirectories;
|
||||
for (const auto& cppFile : cppFiles)
|
||||
{
|
||||
std::filesystem::path cppPath{cppFile};
|
||||
std::filesystem::path oFile = cppPath.replace_extension("o");
|
||||
intermediateDirectories.emplace("$(OBJPATH)/" + oFile.parent_path().string());
|
||||
}
|
||||
return intermediateDirectories;
|
||||
}
|
||||
|
||||
@@ -6,4 +6,7 @@ class Makefile
|
||||
{
|
||||
public:
|
||||
static void Save(ConfigFile& conf, unsigned int flags);
|
||||
|
||||
private:
|
||||
static std::set<std::string> GetIntermediateDirectories(const std::set<std::string>& cppFiles);
|
||||
};
|
||||
|
||||
+2
-3
@@ -41,13 +41,12 @@ Usage: makegen [options]
|
||||
-s, single Runs additional makegen options as single thread
|
||||
(no --jobs=X flag)
|
||||
--simple Creates a simple Makefile without include dependencies
|
||||
(no --jobs=X flag)
|
||||
--target=<target> Run the makegen.xml file with the specified target
|
||||
|
||||
If no option is given it will run \"make all\"
|
||||
If no option is given it will run "make all"
|
||||
|
||||
If multiple make options are given it will run in the following order:
|
||||
clean all install run, rebuild will be translated to \"clean make\")");
|
||||
clean all install run, rebuild will be translated to "clean make")");
|
||||
}
|
||||
|
||||
void GenMakefile(ConfigFile& conf, unsigned int flags)
|
||||
|
||||
Reference in New Issue
Block a user