- Streamlined C++ Compilation for Your Convenience
- Block 1: Clear Screen and Set Build Task Name
- Block 2: Check for Compliance Helper File
- Block 3: Find C++ Source Files
- Block 4: Display Source Files
- Block 5: Define Compiler Options
- Block 6: Define Clang Compiler Options
- Block 7: Define Common Compiler Options
- Block 8: Determine Compiler Options Based on Compiler Selection
- Block 9: Clear Screen and Set Build Task Name
- Conclusion
This Bash script automates the compilation of C++ source files using GCC or Clang. It identifies source files in the current directory, applies compiler options like warning flags, and checks for a "Compliance_Workarounds.hpp" header for C++20 compliance. The script's functionality includes compiler selection, option assignment, and compilation. It provides a detailed list of source files to be compiled and displays the compiler's version. Upon successful compilation, it generates an executable. This script streamlines the C++ build process, making it adaptable to different compilers and ensuring C++20 compliance while enhancing code quality with various warning flags.
Streamlined C++ Compilation for Your Convenience
This Bash script, designed for your ease and efficiency, simplifies the compilation of C++ source files using either the GCC or Clang compiler. It offers a range of advanced features, including compiler selection, the integration of warning flags, and compatibility checks for C++20 compliance via the "Compliance_Workarounds.hpp" header. By automating complex compilation tasks, the script ensures code quality, making it a valuable resource to assist with your C++ assignment. Compile your projects effortlessly, saving time and effort, and produce high-quality executables with confidence.
Block 1: Clear Screen and Set Build Task Name
This block clears the terminal screen, assigns the first argument passed to the script as the build task name, and prints the build title with a newline.
clear
BuildTaskName="$1"
echo -e "$BuildTaskName\n" # Build Title
Block 2: Check for Compliance Helper File
complianceHelperFile_filename="Compliance_Workarounds.hpp"
complianceHelperFile_path="./${complianceHelperFile_filename}"
if [[ ! -f "${complianceHelperFile_path}" ]]; then
complianceHelperFile_path="${0%/*}/${complianceHelperFile_filename}"
if [[ ! -f "${complianceHelperFile_path}" ]]; then
complianceHelperFile_path=/dev/null
fi
fi
This block defines the filename and path for a compliance helper header file. It checks if the header file exists in the current directory, and if not, it checks if the header file exists in the same directory as the script. If the file is not found in either location, it sets the compliance helper file path to "/dev/null," indicating that no helper file will be used.
Block 3: Find C++ Source Files
This block temporarily changes the internal field separator (IFS) to a newline character and uses the "find" command to search for C++ source files (files with a ".cpp" extension) in or under the current directory. It populates an array named "sourceFiles" with the list of found source files while ignoring hidden folders (those starting with a dot).
temp=$IFS
IFS=$'\n'
sourceFiles=( $(find -L ./ -path ./.* -prune -o -name "*.cpp" -print) )
IFS=$temp
Block 4: Display Source Files
echo "compiling in \"$PWD\" ..."
for fileName in "${sourceFiles[@]}"; do
echo " $fileName"
done
echo ""
This block prints the current working directory and the list of C++ source files to be compiled. It displays the path to each source file.
Block 5: Define Compiler Options
GccOptions=" -Wall -Wextra -pedantic \
-Wdelete-non-virtual-dtor \
-Wduplicated-branches \
-Wduplicated-cond \
-Wextra-semi \
-Wfloat-equal \
-Winit-self \
-Wlogical-op \
-Wnoexcept \
-Wshadow \
-Wnon-virtual-dtor \
-Wold-style-cast \
-Wstrict-null-sentinel \
-Wsuggest-override \
-Wswitch-default \
-Wswitch-enum \
-Woverloaded-virtual \
-Wuseless-cast "
This block defines a set of compiler warning flags and stores them in the "GccOptions" variable. These options are specific to the GCC compiler.
Block 6: Define Clang Compiler Options
ClangOptions=" -stdlib=libc++ -Weverything \
-Wno-comma \
-Wno-unused-template \
-Wno-sign-conversion \
-Wno-exit-time-destructors \
-Wno-global-constructors \
-Wno-missing-prototypes \
-Wno-weak-vtables \
-Wno-padded \
-Wno-double-promotion \
-Wno-c++98-compat-pedantic \
-Wno-c++11-compat-pedantic \
-Wno-c++14-compat-pedantic \
-Wno-c++17-compat-pedantic \
-Wno-c++20-compat-pedantic \
-fdiagnostics-show-category=name \
\
-Wno-zero-as-null-pointer-constant \
-Wno-ctad-maybe-unsupported "
Block 7: Define Common Compiler Options
CommonOptions="-pthread -std=c++20 -I./ -DUSING_TOMS_SUGGESTIONS -D__func__=__PRETTY_FUNCTION__
This block defines a set of common compiler options that are shared between both the GCC and Clang compilers. It includes options related to C++ standard, preprocessor directives, and other common flags.
Block 8: Determine Compiler Options Based on Compiler Selection
if [ $Compiler = 'clang++' ]; then
options="$Options $CommonOptions $ClangOptions"
elif [ $Compiler = 'g++' ]; then
options="$Options $CommonOptions $GccOptions"
fi
This block checks the value of the "Compiler" variable (which should be set elsewhere in the script) and assigns the appropriate compiler options based on the selected compiler (either Clang or GCC).
Block 9: Clear Screen and Set Build Task Name
echo $Compiler $options -include \"${complianceHelperFile_path}\"
$Compiler –version
$Compiler $options -include "${complianceHelperFile_path}" -o "$Executable" "${sourceFiles[@]}" && echo -e "\nSuccessfully created \"$Executable\""
This block compiles the C++ source files using the selected compiler and the options defined earlier. It also includes the compliance helper header file, if available. Finally, it outputs the compiler version and a success message upon successful compilation.
Conclusion
In conclusion, this Bash script emerges as an indispensable tool for streamlining your C++ compilation tasks, providing you with a convenient and efficient solution. Whether you opt for GCC or Clang, this script simplifies the process and bolsters code quality through the incorporation of advanced features and adherence to C++20 standards. It not only helps you meet your assignment requirements but also significantly reduces the time and effort needed for complex compilation tasks. Embrace this powerful automation tool to boost your productivity and produce high-quality executables effortlessly. By automating intricate compilation procedures and ensuring code compliance, this script empowers you to focus on the creative aspects of your C++ projects, confident in the reliability of your code.
Similar Samples
Discover our curated selection of programming assignment samples at ProgrammingHomeworkHelp.com. These samples cover a range of languages and topics, offering valuable insights and solutions for students. Whether you're tackling Java, Python, or C++, our examples provide clear demonstrations to guide your learning and enhance your coding skills. Explore and learn with confidence from our comprehensive collection
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++
C++