simple Makefile with dependency files
This commit is contained in:
parent
d0f67430d8
commit
bee43f9297
9 changed files with 18013 additions and 1 deletions
|
@ -1,2 +1,2 @@
|
|||
# coockecutter-make-cpp
|
||||
# cookiecutter-make-cpp
|
||||
|
||||
|
|
5
cookiecutter.json
Normal file
5
cookiecutter.json
Normal file
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"project_name": "project_name",
|
||||
"app_name": "app_name",
|
||||
"description": "the soul is the prison of the body"
|
||||
}
|
132
{{cookiecutter.project_name}}/.gitignore
vendored
Normal file
132
{{cookiecutter.project_name}}/.gitignore
vendored
Normal file
|
@ -0,0 +1,132 @@
|
|||
# ---> C++
|
||||
# Prerequisites
|
||||
*.d
|
||||
|
||||
# Compiled Object files
|
||||
*.slo
|
||||
*.lo
|
||||
*.o
|
||||
*.obj
|
||||
|
||||
# Precompiled Headers
|
||||
*.gch
|
||||
*.pch
|
||||
|
||||
# Compiled Dynamic libraries
|
||||
*.so
|
||||
*.dylib
|
||||
*.dll
|
||||
|
||||
# Fortran module files
|
||||
*.mod
|
||||
*.smod
|
||||
|
||||
# Compiled Static libraries
|
||||
*.lai
|
||||
*.la
|
||||
*.a
|
||||
*.lib
|
||||
|
||||
# Executables
|
||||
*.exe
|
||||
*.out
|
||||
*.app
|
||||
|
||||
# ---> Archives
|
||||
# It's better to unpack these files and commit the raw source because
|
||||
# git has its own built in compression methods.
|
||||
*.7z
|
||||
*.jar
|
||||
*.rar
|
||||
*.zip
|
||||
*.gz
|
||||
*.bzip
|
||||
*.bz2
|
||||
*.xz
|
||||
*.lzma
|
||||
*.cab
|
||||
|
||||
#packing-only formats
|
||||
*.iso
|
||||
*.tar
|
||||
|
||||
#package management formats
|
||||
*.dmg
|
||||
*.xpi
|
||||
*.gem
|
||||
*.egg
|
||||
*.deb
|
||||
*.rpm
|
||||
*.msi
|
||||
*.msm
|
||||
*.msp
|
||||
|
||||
# ---> C
|
||||
# Prerequisites
|
||||
*.d
|
||||
|
||||
# Object files
|
||||
*.o
|
||||
*.ko
|
||||
*.obj
|
||||
*.elf
|
||||
|
||||
# Linker output
|
||||
*.ilk
|
||||
*.map
|
||||
*.exp
|
||||
|
||||
# Precompiled Headers
|
||||
*.gch
|
||||
*.pch
|
||||
|
||||
# Libraries
|
||||
*.lib
|
||||
*.a
|
||||
*.la
|
||||
*.lo
|
||||
|
||||
# Shared objects (inc. Windows DLLs)
|
||||
*.dll
|
||||
*.so
|
||||
*.so.*
|
||||
*.dylib
|
||||
|
||||
# Executables
|
||||
*.exe
|
||||
*.out
|
||||
*.app
|
||||
*.i*86
|
||||
*.x86_64
|
||||
*.hex
|
||||
|
||||
# Debug files
|
||||
*.dSYM/
|
||||
*.su
|
||||
*.idb
|
||||
*.pdb
|
||||
|
||||
# Kernel Module Compile Results
|
||||
*.mod*
|
||||
*.cmd
|
||||
modules.order
|
||||
Module.symvers
|
||||
Mkfile.old
|
||||
dkms.conf
|
||||
|
||||
# ---> Linux
|
||||
*~
|
||||
|
||||
# temporary files which can be created if a process still has a handle open of a deleted file
|
||||
.fuse_hidden*
|
||||
|
||||
# KDE directory preferences
|
||||
.directory
|
||||
|
||||
# Linux trash folder which might appear on any partition or disk
|
||||
.Trash-*
|
||||
|
||||
# .nfs files are created when an open file is removed but is still being accessed
|
||||
.nfs*
|
||||
|
||||
build/
|
57
{{cookiecutter.project_name}}/Makefile
Normal file
57
{{cookiecutter.project_name}}/Makefile
Normal file
|
@ -0,0 +1,57 @@
|
|||
CC = gcc
|
||||
CXX = g++
|
||||
LD = g++
|
||||
CXXFLAGS := -std=gnu++20 -Wall -Werror -Wpointer-arith -Wfatal-errors
|
||||
CXXFLAGS += -flto -O3
|
||||
#CXXFLAGS += -ggdb3
|
||||
|
||||
CFLAGS = -Wall -Werror -Wpointer-arith -Wfatal-errors
|
||||
|
||||
ifdef LINK_MOSTLY_STATIC
|
||||
LDFLAGS := -static-libstdc++ -Wl,-Bstatic -lboost_program_options
|
||||
LDFLAGS += -Wl,-Bdynamic -lpthread -ldl
|
||||
LDFLAGS += -Wl,--exclude-libs,ALL
|
||||
else
|
||||
LDFLAGS = -lboost_program_options
|
||||
endif
|
||||
|
||||
BUILDDIR = build
|
||||
|
||||
OBJECTS =
|
||||
|
||||
DEPS := $(OBJECTS:.o=.d) $(BUILDDIR)/{{cookiecutter.app_name}}.d
|
||||
|
||||
|
||||
all: $(BUILDDIR)/{{cookiecutter.app_name}}
|
||||
|
||||
|
||||
$(BUILDDIR)/{{cookiecutter.app_name}}: $(OBJECTS) $(BUILDDIR)/{{cookiecutter.app_name}}.o
|
||||
@mkdir -p $(dir $@)
|
||||
@echo link $@
|
||||
@$(LD) $(CXXFLAGS) $^ -o $@ $(LDFLAGS)
|
||||
|
||||
|
||||
$(BUILDDIR)/%.o: src/%.cpp Makefile
|
||||
@mkdir -p $(dir $@)
|
||||
@echo compile $@
|
||||
@$(CXX) $(CXXFLAGS) -MQ $@ -MM -MF $(patsubst %.o,%.d,$@) $<
|
||||
@$(CXX) $(CXXFLAGS) -c $< -o $@
|
||||
|
||||
|
||||
$(BUILDDIR)/%.o: src/%.c Makefile
|
||||
@mkdir -p $(dir $@)
|
||||
@echo compile $@
|
||||
@$(CC) $(CFLAGS) -MQ $@ -MM -MF $(patsubst %.o,%.d,$@) $<
|
||||
@$(CC) $(CFLAGS) -c $< -o $@
|
||||
|
||||
|
||||
install: $(BUILDDIR)/{{cookiecutter.app_name}}
|
||||
install -m 0755 $^ $(DESTDIR)/usr/bin
|
||||
|
||||
|
||||
clean:
|
||||
rm -r build/
|
||||
|
||||
|
||||
-include $(DEPS)
|
||||
|
78
{{cookiecutter.project_name}}/src/errors.h
Normal file
78
{{cookiecutter.project_name}}/src/errors.h
Normal file
|
@ -0,0 +1,78 @@
|
|||
//
|
||||
// Created by jedi on 06.02.21.
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#if __has_include(<source_location>)
|
||||
#include <source_location>
|
||||
using std::source_location;
|
||||
#elif __has_include(<experimental/source_location>)
|
||||
|
||||
#include <experimental/source_location>
|
||||
|
||||
using std::experimental::source_location;
|
||||
#else
|
||||
#error "<source_location> not found"
|
||||
#endif
|
||||
|
||||
/*
|
||||
template<typename ERROR = std::runtime_error>
|
||||
inline void
|
||||
throw_with_pos(const std::string &message = "", const source_location &location = source_location::current()) {
|
||||
std::stringstream ss;
|
||||
ss << location.function_name() << " in "
|
||||
<< location.file_name() << ':'
|
||||
<< location.line() << ' '
|
||||
<< message;
|
||||
throw ERROR(ss.str());
|
||||
}*/
|
||||
|
||||
#include <type_traits>
|
||||
|
||||
template<typename...>
|
||||
struct is_empty : std::false_type {
|
||||
};
|
||||
|
||||
template<typename T, template<T...> class Z, T... Is>
|
||||
struct is_empty<T, Z<Is...>> : std::true_type {
|
||||
};
|
||||
|
||||
template<typename T, template<T...> class Z, T First, T... Rest>
|
||||
struct is_empty<T, Z<First, Rest...>> : std::false_type {
|
||||
};
|
||||
|
||||
template<typename...>
|
||||
struct Z;
|
||||
|
||||
|
||||
template<typename ERROR = std::runtime_error, typename... T>
|
||||
struct throw_with_pos {
|
||||
explicit throw_with_pos(std::string_view message = "", T &&... pack,
|
||||
source_location loc = source_location::current()) {
|
||||
std::stringstream ss;
|
||||
ss << loc.function_name() << " in "
|
||||
<< loc.file_name() << ':'
|
||||
<< loc.line() << ' '
|
||||
<< message;
|
||||
if(!is_empty<Z<T...>>::value)
|
||||
((ss << std::forward<T>(pack)), ...);
|
||||
throw ERROR(ss.str());
|
||||
}
|
||||
explicit throw_with_pos(const source_location& loc, T &&... pack) {
|
||||
std::stringstream ss;
|
||||
ss << loc.function_name() << " in "
|
||||
<< loc.file_name() << ':'
|
||||
<< loc.line() << ' ';
|
||||
if(!is_empty<Z<T...>>::value)
|
||||
((ss << std::forward<T>(pack)), ...);
|
||||
throw ERROR(ss.str());
|
||||
}
|
||||
};
|
||||
|
||||
template<typename ERROR = std::runtime_error, typename... T>
|
||||
throw_with_pos(std::string_view, T &&...m) -> throw_with_pos<ERROR, T...>;
|
||||
|
||||
template<typename ERROR = std::runtime_error, typename... T>
|
||||
throw_with_pos(const source_location&, T &&...m) -> throw_with_pos<ERROR, T...>;
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
/**
|
||||
* {{ cookiecutter.description }}
|
||||
* @file {{ cookiecutter.app_name }}.cpp
|
||||
*/
|
||||
|
||||
/**
|
||||
* The starting point of the program
|
||||
* @param argc the number of arguments
|
||||
* @param argv the argument array
|
||||
*/
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
return 0;
|
||||
}
|
17705
{{cookiecutter.project_name}}/tests/catch.hpp
Normal file
17705
{{cookiecutter.project_name}}/tests/catch.hpp
Normal file
File diff suppressed because it is too large
Load diff
8
{{cookiecutter.project_name}}/tests/test.cpp
Normal file
8
{{cookiecutter.project_name}}/tests/test.cpp
Normal file
|
@ -0,0 +1,8 @@
|
|||
//
|
||||
// Created by jedi on 1/18/19.
|
||||
//
|
||||
|
||||
#define CATCH_CONFIG_MAIN
|
||||
#include "test.h"
|
||||
|
||||
|
13
{{cookiecutter.project_name}}/tests/test.h
Normal file
13
{{cookiecutter.project_name}}/tests/test.h
Normal file
|
@ -0,0 +1,13 @@
|
|||
//
|
||||
// Created by jedi on 1/23/19.
|
||||
//
|
||||
|
||||
#ifndef TETRA_COMMON_TEST_H
|
||||
#define TETRA_COMMON_TEST_H
|
||||
|
||||
#define CATCH_CONFIG_ENABLE_BENCHMARKING
|
||||
#include "catch.hpp"
|
||||
|
||||
using namespace Catch::Matchers;
|
||||
|
||||
#endif //TETRA_COMMON_TEST_H
|
Loading…
Reference in a new issue