diff --git a/.gitignore b/.gitignore index 9bd9b01..0512d3c 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ *.~undo-tree~ +*.dSYM~ \ No newline at end of file diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..f14285a --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,19 @@ +{ + "configurations": [ + { + "name": "Mac", + "includePath": [ + "${workspaceFolder}/**" + ], + "defines": [], + "macFrameworkPath": [ + "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks" + ], + "compilerPath": "/usr/bin/clang", + "cStandard": "c17", + "cppStandard": "c++20", + "intelliSenseMode": "macos-clang-x64" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..970589a --- /dev/null +++ b/Makefile @@ -0,0 +1,33 @@ +# Universal makefile for single C++ program +# +# Use gcc flag -MMD (user) or -MD (user/system) to generate dependencies among source files. +# Use make default rules for commonly used file-name suffixes and make variables names. +# +# % make [ a.out ] + +########## Variables ########## + +CXX = g++ # compiler +CXXFLAGS = -std=c++20 -g -Wall -MMD # compiler flags +MAKEFILE_NAME = ${firstword ${MAKEFILE_LIST}} # makefile name + +SOURCES = $(wildcard *.cc) # source files (*.cc) +OBJECTS = ${SOURCES:.cc=.o} # object files forming executable +DEPENDS = ${OBJECTS:.o=.d} # substitute ".o" with ".d" +EXEC = a.out # executable name + +########## Targets ########## + +.PHONY : clean # not file names + +${EXEC} : ${OBJECTS} # link step + ${CXX} ${CXXFLAGS} $^ -o $@ # additional object files before $^ + +${OBJECTS} : ${MAKEFILE_NAME} # OPTIONAL : changes to this file => recompile + +# make implicitly generates rules to compile C++ files that generate .o files + +-include ${DEPENDS} # include *.d files containing program dependences + +clean : # remove files that can be regenerated + rm -f ${DEPENDS} ${OBJECTS} ${EXEC} diff --git a/test.cc b/test.cc new file mode 100644 index 0000000..fa5653e --- /dev/null +++ b/test.cc @@ -0,0 +1,8 @@ +#include + +using namespace std; + +int main() +{ + cout << "Hello, World!" << endl; +} \ No newline at end of file diff --git a/tools/Makefile b/tools/Makefile new file mode 100644 index 0000000..01736fd --- /dev/null +++ b/tools/Makefile @@ -0,0 +1,33 @@ +# Universal makefile for single C++ program +# +# Use gcc flag -MMD (user) or -MD (user/system) to generate dependencies among source files. +# Use make default rules for commonly used file-name suffixes and make variables names. +# +# % make [ a.out ] + +########## Variables ########## + +CXX = g++-11 # compiler +CXXFLAGS = -std=c++20 -g -Wall -MMD # compiler flags +MAKEFILE_NAME = ${firstword ${MAKEFILE_LIST}} # makefile name + +SOURCES = $(wildcard *.cc) # source files (*.cc) +OBJECTS = ${SOURCES:.cc=.o} # object files forming executable +DEPENDS = ${OBJECTS:.o=.d} # substitute ".o" with ".d" +EXEC = a.out # executable name + +########## Targets ########## + +.PHONY : clean # not file names + +${EXEC} : ${OBJECTS} # link step + ${CXX} ${CXXFLAGS} $^ -o $@ # additional object files before $^ + +${OBJECTS} : ${MAKEFILE_NAME} # OPTIONAL : changes to this file => recompile + +# make implicitly generates rules to compile C++ files that generate .o files + +-include ${DEPENDS} # include *.d files containing program dependences + +clean : # remove files that can be regenerated + rm -f ${DEPENDS} ${OBJECTS} ${EXEC} diff --git a/tools/compile b/tools/compile new file mode 100755 index 0000000..5a24514 --- /dev/null +++ b/tools/compile @@ -0,0 +1,25 @@ +#!/bin/bash +# Use this script to compile your .cc files in dependency order + +# Arguments: +# $1 = name of file containing list of .cc files +# $2 = name of the output file + +cxx="g++-11" +cxxflags="-std=c++20 -fmodules-ts -Wall -g" + +if [ $# -lt 1 ]; then + echo "Usage: $0 list-filename [output-name]" 1>&2 + exit 1 +fi + +if [ $# -eq 2 ]; then + name="-o $2" +fi + +for x in $(cat $1); do + $cxx $cxxflags -c $x +done + +$cxx *.o $name + diff --git a/tools/produceOutputs b/tools/produceOutputs new file mode 100755 index 0000000..7397f63 Binary files /dev/null and b/tools/produceOutputs differ diff --git a/tools/runSuite b/tools/runSuite new file mode 100755 index 0000000..bfa3ada Binary files /dev/null and b/tools/runSuite differ