My Linux Developemnt Environment:
Core Compilation Tools to build application from the srouce code:
GNU - GCC Compiler
https://gcc.gnu.org/
gcc
(GNU Compiler Collection): The most important tool. It is the primary compiler for C and C++ and is required for compiling most source code.
g++
(C++ Compiler): The C++ equivalent of gcc.
GNU Make
https://www.gnu.org/software/make/
make
: This utility is a build automation tool. It reads a Makefile (a file written by the software's developer) and executes the commands needed to compile the source code, link the different parts, and build the final executable.
GNU Autoconf
Autoconf is an extensible package of M4 macros that produce shell scripts to automatically configure software source code packages.
https://www.gnu.org/software/autoconf/
sudo pacman -S autoconf
GNU Automake
GNU Automake is a tool for automatically generating Makefile.in files compliant with the GNU Coding Standards. Automake requires the use of GNU Autoconf.
https://www.gnu.org/software/automake/
sudo pacman -S automake
Git - https://git-scm.com/
Git is a distributed version control system used to track changes in files, especially useful for collaborative software development. It allows multiple developers to work on the same project simultaneously, managing different versions of code and facilitating code merging.
sudo pacman -S git
What's the difference between glibc and libc6?
http://www.linux-m68k.org/faq/glibcinfo.html
libc is the C library; basically, it contains all of the system functions that most (if not all) programs need to run on Linux.
libc6-dev
: The development headers and libraries for the GNU C Library. These are crucial for building C programs.
glibc
: short for the GNU C Library, is a fundamental software component in Linux systems. It's the standard C library that provides essential functions and system calls for applications to interact with the operating system. In essence, it acts as a bridge between programs and the underlying Linux kernel
GNU Binutils
https://www.gnu.org/software/binutils/
binutils
Binary utilities (linker, assembler, etc.)
sudo pacman -S binutils
Emacs (Powerful Editor for Programmer)
sudo apt install emacs
Neovim
https://neovim.io/
LazyVim
https://www.lazyvim.org/installation
tmux
https://github.com/tmux/tmux
sudo apt install tmux
Obsidian
https://obsidian.md/
VIM
sudo apt install vim
VIM Colorscheme - https://github.com/vim/colorschemes/tree/master/colors
Debian, Ubuntu, Mint
Build Essential: gcc, g++, make
sudo apt install build-essential cmake -y
Arch, CachyOS, Manjaro
sudo pacman -S base-devel
Cmake - https://cmake.org/
CMake is the de-facto standard for building C++ code, with over 2 million downloads a month. It’s a powerful, comprehensive solution for managing the software build process. Get everything you need to successfully leverage CMake by visiting our resources section.
sudo pacman -S cmake
Python
sudo apt install python3-dev
clang - (compiler C/C++ language family)
sudo apt install clang
clangd - (language server for code completion, semantic navigation, go to definition, etc - better than Microsoft IntelliSense for Cross Platform)
sudo apt install clangd
Screenkey ver 1.5
https://www.thregr.org/wavexx/software/screenkey/
-- MAYBE PACKAGES ---
VSCodium
https://vscodium.com/
sudo apt install codium -y
You-Completeme - code completion
sudo apt list vim-youcompleteme
a comprehensive development environment on Linux. A solid base of essential packages can save you a lot of time and hassle. While the specific package names may vary slightly between distributions, the core tools are almost always the same.
The following list provides the essential packages you'll need, organized into logical groups. This list is a good starting point for a wide range of development tasks.
1. Core Build Tools (The "Build Essentials")
These are the fundamental tools for compiling, linking, and building software from source.
-
make
: A utility that controls the generation of executables and other files from source files. It's the standard build automation tool. -
gcc
orclang
: The primary C/C++ compilers. Most projects are built using one of these.gcc
is the GNU Compiler Collection, whileclang
is another popular option. -
binutils
: A collection of binary tools, including a linker (ld
), assembler (as
), and other utilities for working with object files and executables. -
pkg-config
: A tool that helps manage and link against libraries. It finds the correct compiler and linker flags for installed libraries. -
git
: The standard version control system for tracking changes in source code. It's an absolute must for any modern development project.
Arch Linux command to install all of the above:
sudo pacman -S base-devel git
Note: The base-devel
meta-package includes make
, gcc
, binutils
, and pkg-config
.
2. Common Libraries and Headers
Many programs rely on common libraries. You need the header files for these libraries to compile against them.
-
glibc
orlib32-glibc
: The GNU C Library, a core dependency for almost all C programs. You'll often need the 32-bit version for cross-compiling. -
libx11
andxorg-server
: For any graphical applications using the X Window System. -
zlib
: A standard compression library used by many programs. -
openssl
: The toolkit for SSL/TLS protocols and cryptography. Essential for any secure networking application. -
curl
andwget
: Command-line tools and libraries for transferring data. Many applications use their libraries to handle network requests.
Arch Linux example:
sudo pacman -S zlib openssl curl xorg-server libx11
3. Scripting Languages
While not strictly required for compiling C/C++ programs, these languages are essential for writing scripts, build tools, and automating tasks.
-
python
: The default Python 3 interpreter. Python is widely used in development for scripting, testing, and various tools. -
python-pip
: The package installer for Python, which you will need to install any third-party Python libraries.
Arch Linux example:
sudo pacman -S python python-pip
4. Text Editors and IDEs
A good text editor is central to any development workflow.
-
vim
orneovim
: A powerful, keyboard-driven text editor popular among developers. -
emacs
: Another highly configurable and popular text editor. -
vscode
orcodium
: A popular, full-featured code editor with a massive ecosystem of extensions.
Arch Linux example:
sudo pacman -S neovim emacs
Note: vscode
and codium
are often available in the AUR (Arch User Repository).
5. Debugging and Profiling
These tools are crucial for finding and fixing bugs and optimizing performance.
-
gdb
: The GNU Project Debugger. A standard for debugging programs written in C, C++, and other languages. -
strace
: A tool to trace system calls and signals. Useful for diagnosing problems with programs that interact with the kernel. -
valgrind
: A powerful memory debugging, memory leak detection, and profiling tool.
Arch Linux example:
sudo pacman -S gdb strace valgrind
My Windows Developemnt Environment:
Visual Studio Community (MSVC)
https://visualstudio.microsoft.com/vs/community/
Visual Studio Code
https://code.visualstudio.com/
VCPKG
https://vcpkg.io/en/
CMake - build tool
https://cmake.org/download/
Clang is an "LLVM native" C/C++/Objective-C compiler
https://llvm.org/
VIM - highly configurable, text-based text editor
https://www.vim.org/download.php
vim-plug - Vim Plugin Manager
https://www.vim.org/scripts/script.php?script_id=4828
Install YouCompleteMe from vim-plug and run the python script
Universal Ctags - generates an index, makes it easy for vim text editor to locate the indexed items.
https://github.com/universal-ctags/ctags-win32
GIT- a distributed version control system
https://git-scm.com/downloads
TortoiseGit – Windows Shell Interface to Git
https://tortoisegit.org/download/
SDL2 - Simple DirectMedia Layer
https://www.libsdl.org/
SFML - Simple and Fast Multimedia Library
https://www.sfml-dev.org/download/
MSYS2 is a collection of tools and libraries (GCC, mingw-w64)
https://www.msys2.org/
Python
https://www.python.org/
WSL - Windows Subsystem for Linux
https://learn.microsoft.com/en-us/windows/wsl/install
For WSL environment See Linux Development Environment
Zoomit - is a screen zoom, annotation, and recording tool for technical presentations and demos.
https://learn.microsoft.com/en-us/sysinternals/downloads/zoomit