Two options for compiling C and C++ , and other kinds of source code files under windows , are : the cygwin-gcc
compiler , and the mingw-gcc
compiler .
For source code , that uses the posix api , the cygwin-gcc
compiler can be used , it provides a substantial implementation of the posix api , provided by the cygwin1.dll
library .
cygwin-gcc
, can also be used to compile source code , which uses the windows api . In both cases , the cygwin1.dll
library , must be made available to the executing program .
For source code , that only uses the windows api , the mingw-gcc
compiler can be used . The produced executable , does not depended on cygwin1.dll
, it just depends on windows libraries .
To install these compilers , two unix like environment , which provide unix commands in the form of windows executables , are available , the first one is the Cygwin
environment , and the second one is MSYS2
environment .
Both environment , provide both compilers , the MSYS2
environment provides a package manager , pacman
, that allows the installation of packages , whereas Cygwin does not provide a package manager , package installation is done through the installer , each time a package is to be installed or removed .
Table of Contents
MSYS2
Installation
To install MSYS2
, download the installer from the MSYS2 website , and double click it .
Click next , on the first screen , next for the install folder , next for the start menu shortcuts , after that msys2 will start installing .
Once the installation is done , three shortcuts will be created in the start menu .
One will launch the MSYS2 Mingw 64
terminal , another will launch the MSYS2 Mingw 32
terminal , and the last one will launch the MSYS2 MSYS
terminal . The difference between these three launchers , is the path :
MINGW32# echo $PATH /mingw32/bin:/usr/local/bin:/usr/bin:/bin:/c/Windows/System32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl #Has /mingw32/bin , prepended , and is #missing /opt/bin comparing to MSYS #path . Differs from MINGW64 path , #by just the prepended directory . MINGW64# echo $PATH /mingw64/bin:/usr/local/bin:/usr/bin:/bin:/c/Windows/System32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl #Has /mingw64/bin prepended , #and is missing /opt/bin , #when comparing to MSYS . #Only differs by the prepended #path , from MINGW32 . MSYS# echo $PATH /usr/local/bin:/usr/bin:/bin:/opt/bin:/c/Windows/System32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
Click on finish , this will run the MSYS2 MSYS terminal
.
From the opened terminal , and to install the mingw-w64
compiler , and the cygwin-gcc
compiler , first issue this command :
$ pacman --sync --refresh --sysupgrade #Sync the packages , refreshing the #database , and upgrading outdated #packages . :: Synchronizing package databases... mingw32 870.9 KiB 268 KiB/s 00:03 [################################] 100% mingw32.sig 438.0 B 0.00 B/s 00:00 [################################] 100% mingw64 874.5 KiB 290 KiB/s 00:03 [################################] 100% mingw64.sig 438.0 B 0.00 B/s 00:00 [################################] 100% msys 295.4 KiB 231 KiB/s 00:01 [################################] 100% msys.sig 438.0 B 0.00 B/s 00:00 [################################] 100% :: Starting core system upgrade... there is nothing to do :: Starting full system upgrade... resolving dependencies... looking for conflicting packages... Packages (18) bsdtar-3.5.1-1 dash-0.5.11.3-1 gdbm-1.19-1 glib2-2.66.4-2 gnupg-2.2.27-1 icu-68.2-1 libgdbm-1.19-1 libgpg-error-1.41-2 libgpgme-1.15.1-1 libhogweed-3.7-1 libnettle-3.7-1 libp11-kit-0.23.22-2 libxml2-2.9.10-7 msys2-keyring-1~20210123-1 nettle-3.7-1 p11-kit-0.23.22-2 tzcode-2020f-1 wget-1.21.1-2 Total Download Size: 18.17 MiB Total Installed Size: 67.88 MiB Net Upgrade Size: 1.22 MiB :: Proceed with installation? [Y/n] y :: Retrieving packages... libhogweed-3.7-1-x86_64 183.4 KiB 230 KiB/s 00:01 [################################] 100% libnettle-3.7-1-x86_64 129.3 KiB 237 KiB/s 00:01 [################################] 100 ... ...
Next issue this command :
$ pacman -S --needed base-devel msys2-devel mingw-w64-x86_64-toolchain #sync the packages . #install only the non installed #packages from the group of #packages base-devel , and #the group of packages msys2-devel #which contain a c/c++ posix #compiler , and install # mingw-w64-x86_64-toolchain #for a windows c/c++ compiler . warning: file-5.39-2 is up to date -- skipping warning: gawk-5.1.0-1 is up to date -- skipping warning: gettext-0.19.8.1-1 is up to date -- skipping warning: grep-3.0-2 is up to date -- skipping warning: pacman-5.2.2-9 is up to date -- skipping warning: perl-5.32.0-2 is up to date -- skipping warning: sed-4.8-1 is up to date -- skipping warning: wget-1.21.1-2 is up to date -- skipping :: There are 48 members in group base-devel: :: Repository msys 1) asciidoc 2) autoconf 3) autoconf2.13 4) autogen 5) automake-wrapper 6) automake1.10 7) automake1.11 8) automake1.12 9) automake1.13 10) automake1.14 11) automake1.15 12) automake1.16 13) automake1.6 14) automake1.7 15) automake1.8 16) automake1.9 17) bison 18) btyacc 19) diffstat 20) diffutils 21) dos2unix 22) flex 23) gdb 24) gettext-devel 25) gperf 26) groff 27) help2man 28) intltool 29) libtool 30) libunrar 31) libunrar-devel 32) m4 33) make 34) man-db 35) pactoys-git 36) patch 37) patchutils 38) pkgconf 39) pkgfile 40) quilt 41) reflex 42) scons 43) swig 44) texinfo 45) texinfo-tex 46) ttyrec 47) unrar 48) xmlto Enter a selection (default=all): warning: gcc-libs-10.2.0-1 is up to date -- skipping :: There are 7 members in group msys2-devel: :: Repository msys 1) binutils 2) cocom 3) gcc 4) gcc-fortran 5) msys2-runtime-devel 6) msys2-w32api-headers 7) msys2-w32api-runtime Enter a selection (default=all): :: There are 19 members in group mingw-w64-x86_64-toolchain: :: Repository mingw64 1) mingw-w64-x86_64-binutils 2) mingw-w64-x86_64-crt-git 3) mingw-w64-x86_64-gcc 4) mingw-w64-x86_64-gcc-ada 5) mingw-w64-x86_64-gcc-fortran 6) mingw-w64-x86_64-gcc-libgfortran 7) mingw-w64-x86_64-gcc-libs 8) mingw-w64-x86_64-gcc-objc 9) mingw-w64-x86_64-gdb 10) mingw-w64-x86_64-gdb-multiarch 11) mingw-w64-x86_64-headers-git 12) mingw-w64-x86_64-libgccjit 13) mingw-w64-x86_64-libmangle-git 14) mingw-w64-x86_64-libwinpthread-git 15) mingw-w64-x86_64-make 16) mingw-w64-x86_64-pkgconf 17) mingw-w64-x86_64-tools-git 18) mingw-w64-x86_64-winpthreads-git 19) mingw-w64-x86_64-winstorecompat-git Enter a selection (default=all): resolving dependencies... looking for conflicting packages... Packages (133) docbook-xml-4.5-2 docbook-xsl-1.79.2-1 expat-2.2.10-1 isl-0.22.1-1 libarchive-3.5.1-1 libatomic_ops-7.6.10-1 libgc-8.0.4-1 libguile-2.2.7-1 libiconv-devel-1.16-2 libltdl-2.4.6-9 libpcre16-8.44-1 libpcre2_16-10.36-1 libpcre2_32-10.36-1 libpcre2posix-10.36-1 libpcre32-8.44-1 libpcrecpp-8.44-1 libpcreposix-8.44-1 libpipeline-1.5.3-2 mingw-w64-x86_64-bzip2-1.0.8-2 mingw-w64-x86_64-ca-certificates-20200601-2 mingw-w64-x86_64-expat-2.2.10-1 mingw-w64-x86_64-gettext-0.19.8.1-10 mingw-w64-x86_64-gmp-6.2.1-1 mingw-w64-x86_64-isl-0.23-1 mingw-w64-x86_64-libffi-3.3-3 mingw-w64-x86_64-libiconv-1.16-2 mingw-w64-x86_64-libsystre-1.0.1-4 mingw-w64-x86_64-libtasn1-4.16.0-1 mingw-w64-x86_64-libtre-git-r128.6fb7206-2 mingw-w64-x86_64-mpc-1.2.1-1 mingw-w64-x86_64-mpdecimal-2.5.0-1 mingw-w64-x86_64-mpfr-4.1.0-3 mingw-w64-x86_64-ncurses-6.2-2 mingw-w64-x86_64-openssl-1.1.1.i-1 mingw-w64-x86_64-p11-kit-0.23.22-1 mingw-w64-x86_64-python-3.8.7-3 mingw-w64-x86_64-readline-8.0.004-2 mingw-w64-x86_64-sqlite3-3.34.1-1 mingw-w64-x86_64-tcl-8.6.11-2 mingw-w64-x86_64-termcap-1.3.1-6 mingw-w64-x86_64-tk-8.6.11.1-1 mingw-w64-x86_64-windows-default-manifest-6.4-3 mingw-w64-x86_64-xxhash-0.8.0-1 mingw-w64-x86_64-xz-5.2.5-2 mingw-w64-x86_64-zlib-1.2.11-9 mingw-w64-x86_64-zstd-1.4.8-2 mpc-1.1.0-1 mpdecimal-2.5.0-1 pcre-8.44-1 pcre2-10.36-1 perl-Locale-Gettext-1.07-7 perl-Module-Build-0.4231-1 perl-Test-Pod-1.52-1 perl-XML-Parser-2.46-3 perl-YAML-Syck-1.32-4 perl-inc-latest-0.500-1 python-3.8.7-1 tar-1.33-1 windows-default-manifest-6.4-1 asciidoc-9.0.4-1 autoconf-2.69-5 autoconf2.13-2.13-3 autogen-5.18.16-1 automake-wrapper-11-1 automake1.10-1.10.3-4 automake1.11-1.11.6-4 automake1.12-1.12.6-4 automake1.13-1.13.4-5 automake1.14-1.14.1-4 automake1.15-1.15.1-2 automake1.16-1.16.2-2 automake1.6-1.6.3-3 automake1.7-1.7.9-3 automake1.8-1.8.5-4 automake1.9-1.9.6-3 binutils-2.35.1-1 bison-3.7.4-1 btyacc-20200910-1 cocom-0.996-2 diffstat-1.63-1 diffutils-3.7-1 dos2unix-7.4.2-1 flex-2.6.4-1 gcc-10.2.0-1 gcc-fortran-10.2.0-1 gdb-9.2-3 gettext-devel-0.19.8.1-1 gperf-3.1-2 groff-1.22.4-1 help2man-1.47.16-1 intltool-0.51.0-2 libtool-2.4.6-9 libunrar-6.0.3-1 libunrar-devel-6.0.3-1 m4-1.4.18-2 make-4.3-1 man-db-2.9.3-1 mingw-w64-x86_64-binutils-2.35.1-3 mingw-w64-x86_64-crt-git-9.0.0.6090.ad98746a-1 mingw-w64-x86_64-gcc-10.2.0-6 mingw-w64-x86_64-gcc-ada-10.2.0-6 mingw-w64-x86_64-gcc-fortran-10.2.0-6 mingw-w64-x86_64-gcc-libgfortran-10.2.0-6 mingw-w64-x86_64-gcc-libs-10.2.0-6 mingw-w64-x86_64-gcc-objc-10.2.0-6 mingw-w64-x86_64-gdb-10.1-2 mingw-w64-x86_64-gdb-multiarch-10.1-2 mingw-w64-x86_64-headers-git-9.0.0.6090.ad98746a-1 mingw-w64-x86_64-libgccjit-10.2.0-6 mingw-w64-x86_64-libmangle-git-9.0.0.6090.ad98746a-1 mingw-w64-x86_64-libwinpthread-git-9.0.0.6090.ad98746a-1 mingw-w64-x86_64-make-4.3-1 mingw-w64-x86_64-pkgconf-1.7.3-5 mingw-w64-x86_64-tools-git-9.0.0.6090.ad98746a-1 mingw-w64-x86_64-winpthreads-git-9.0.0.6090.ad98746a-1 mingw-w64-x86_64-winstorecompat-git-9.0.0.6090.ad98746a-1 msys2-runtime-devel-3.1.7-4 msys2-w32api-headers-8.0.0.5683.629fd2b1-1 msys2-w32api-runtime-8.0.0.5683.629fd2b1-1 pactoys-git-r2.07ca37f-1 patch-2.7.6-1 patchutils-0.4.2-1 pkgconf-1.7.3-2 pkgfile-21-1 quilt-0.66-2 reflex-20200715-1 scons-3.1.2-4 swig-4.0.2-1 texinfo-6.7-3 texinfo-tex-6.7-3 ttyrec-1.0.8-2 unrar-6.0.3-1 xmlto-0.0.28-2 Total Download Size: 247.69 MiB Total Installed Size: 1603.39 MiB :: Proceed with installation? [Y/n] y :: Retrieving packages... mingw-w64-x86_64-libiconv-... 744.5 KiB 270 KiB/s 00:03 [################################] 100% mingw-w64-x86_64-zlib-1.2.... 101.4 KiB 186 KiB/s 00:01 [################################] 100%
The Cygwin compiler , which is able to compile posix source code , is accessible from the already open terminal , which is , the MSYS2 MSYS terminal
, because it is in the path .
$ g++ --version g++ (GCC) 10.2.0 Copyright (C) 2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. #Optionally Create a source file #containing posix api , and #compile it . $ nano test.c #Paste the following content . #include <termios.h> /*Contains the definitions used by the terminal I/O interfaces .*/ #include<stdio.h> /*Include the standard input and output */ int main(void ){ printf("%d" , IGNPAR ); /*Print the value of the constant , ignore characters with parity errors . */ } #control-x followed by a #yes , and an enter to exit #nano and save the source file . $ cc test.c #Compile the source file . $./a.exe #Execute the compiled source file . 4
The MinGW 64 compiler , which produces windows executable , that do not depend on cygwin1.dll
, and which cannot compile posix source code , is accessible from the terminal MSYS2 MinGW 64
, which can be gotten , by clicking on the shortcut MSYS2 MinGW 64-bit
, in the start menu .
$ g++ --version g++.exe (Rev6, Built by MSYS2 project) 10.2.0 Copyright (C) 2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Package management using pacman
Intro
pacman
is the package manager used by MSYS2
, it installs the packages to a subdirectory in the MSYS2
installation directory , which is by default C:\msys64
.
pacman
has three repositories configured , from which packages can be installed .
The first one is the msys2
repository , which related directories are /etc
and /usr
, and which installed packages , are accessible using the terminal MSYS2 MSYS
. This repository contains the Cygwin compiler , which produces windows executable , dependent on the cygwin1.dll
library .
An example of an application , installed from the msys2
repository , is emacs .
$ which emacs #Path of the accessible #emacs . /usr/bin/emacs
The latter two are the mingw32
, and mingw64
repositories , which related directories are : /mingw32
, and /mingw64
.
Their installed packages are accessible from MSYS2 MinGW 32-bit
and MSYS2 MinGW 64-bit
shortcuts .
An example of an application installed from the mingw64
repository , is emacs .
$ which emacs #Path of the accessible #emacs . /mingw64/bin/emacs
Other directories found under C:\msys64
, and related to posix are : /bin
, /dev
, /home
, /opt
, /proc
, /tmp
, /var
. The windows disk drives , can be accessed using /c
or /d
or …
The pacman --sync
operation is used to synchronize the packages . The packages synchronization operation , must be followed by an option , which is the option , of what this operation will be doing .
Updating packages
To update the package database , --sync --refresh
, can be used , and to force a refresh of the package database , even if it is up to date , --sync --refresh --refresh
can be used .
$ pacman --sync --refresh #--sync operation is used for #package synchronization . Package #synchronization take some options . #The --refresh option is used to #refresh the database . :: Synchronizing package databases... mingw32 870.9 KiB 527 KiB/s 00:02 [#####################] 100% mingw32.sig 438.0 B 0.00 B/s 00:00 [#####################] 100% mingw64 874.5 KiB 496 KiB/s 00:02 [#####################] 100% mingw64.sig 438.0 B 0.00 B/s 00:00 [#####################] 100% msys 295.4 KiB 421 KiB/s 00:01 [#####################] 100% msys.sig 438.0 B 0.00 B/s 00:00 [#####################] 100%
Upgrading packages
To upgrade all the packages which are out of date , --sync --sysupgrade
can be used .
$ pacman --sync --refresh --sysupgrade #The sync operation is performed , #It is passed the refresh option , #to refresh the database , and the #sysupgrade option , to upgrade , #all of the installed packages . :: Synchronizing package databases... mingw32 is up to date mingw64 is up to date msys is up to date :: Starting core system upgrade... there is nothing to do :: Starting full system upgrade... resolving dependencies... looking for conflicting packages... Packages (18) bsdtar-3.5.1-1 dash-0.5.11.3-1 gdbm-1.19-1 glib2-2.66.4-2 gnupg-2.2.27-1 icu-68.2-1 libgdbm-1.19-1 libgpg-error-1.41-2 libgpgme-1.15.1-1 libhogweed-3.7-1 libnettle-3.7-1 libp11-kit-0.23.22-2 libxml2-2.9.10-7 msys2-keyring-1~20210123-1 nettle-3.7-1 p11-kit-0.23.22-2 tzcode-2020f-1 wget-1.21.1-2 Total Download Size: 18.17 MiB Total Installed Size: 67.88 MiB Net Upgrade Size: 1.22 MiB :: Proceed with installation? [Y/n] :: Retrieving packages... libhogweed-3.7-1... 183.4 KiB 294 KiB/s 00:01 [#####################] 100% ... ...
Searching , and getting packages information
To search for a package , one of these following options can be used .
--sync --groups
, will list all the available groups . A group is a set of related packages , that can be installed together . An optional group name can be provided , in this case , the packages , that belong to this group , are displayed .
$ pacman --sync --groups #--sync operation is used to #sync the packages . It takes #options , the --groups option #will list all the available #groups of packages . mingw-w64-i686-arm-none-eabi-toolchain kf5 mingw-w64-i686-avr-toolchain mingw-w64-i686-toolchain mingw-w64-i686-eda mingw-w64-i686 mingw-w64-i686-gimp-plugins kde-applications kdebase mingw-w64-i686-qt mingw-w64-i686-qt5 mingw-w64-i686-qt-static mingw-w64-i686-qt5-static mingw-w64-i686-riscv64-unknown-elf-toolchain mingw-w64-i686-vulkan-devel tesseract-data mingw-w64-x86_64-arm-none-eabi-toolchain mingw-w64-x86_64-avr-toolchain mingw-w64-x86_64-toolchain mingw-w64-x86_64-eda mingw-w64-x86_64 mingw-w64-x86_64-gimp-plugins mingw-w64-x86_64-qt mingw-w64-x86_64-qt5 mingw-w64-x86_64-qt-static mingw-w64-x86_64-qt5-static mingw-w64-x86_64-riscv64-unknown-elf-toolchain mingw-w64-x86_64-vulkan-devel libraries development base-devel msys2-devel VCS base compression sys-utils Database vim-plugins net-utils editors python-modules midipix-cross-toolchain midipix-cross mingw-w64-cross-toolchain mingw-w64-cross mingw-w64-cross-clang-toolchain perl-modules utilities $ pacman --sync --groups --groups base #View all the packages related #to the group base . base bzip2 base coreutils base findutils base flex base gawk base getent base grep base gzip base inetutils base libargp base lndir base msys2-launcher base ncurses base pactoys-git base pkgfile base sed base tftp-hpa base time base ttyrec base which
To list all the available packages --sync --list
can be used . Optionally the name of a repository can be specified , to list only packages from that repository .
$ pacman --sync --list msys #List only the packages that #are available from the msys #repository . msys ansible 2.9.11-1 msys apr 1.7.0-1 msys apr-devel 1.7.0-1 msys apr-util 1.6.1-1 msys apr-util-devel 1.6.1-1 msys asciidoc 9.0.4-1 msys aspell 0.60.8-1 msys aspell-devel 0.60.8-1 msys aspell6-en 2019.10.06-1 msys atool 0.39.0-1 msys autoconf 2.69-5 msys autoconf-archive 2019.01.06-1 msys autoconf2.13 2.13-3 msys autogen 5.18.16-1 msys automake-wrapper 11-1 msys automake1.10 1.10.3-4 msys automake1.11 1.11.6-4 msys automake1.12 1.12.6-4 msys automake1.13 1.13.4-5 msys automake1.14 1.14.1-4 msys automake1.15 1.15.1-2 msys automake1.16 1.16.2-2 msys automake1.6 1.6.3-3 msys automake1.7 1.7.9-3 msys automake1.8 1.8.5-4 .... ....
To search for a specific package using regex . --sync --search theRegex
can be used .
$ pacman --sync --search 'emac.*' #Search for all the packages , #that contain emac , and end #with zero or more character . mingw32/mingw-w64-i686-emacs 27.1-2 The extensible, customizable, self-documenting, real-time display editor (mingw-w64) mingw32/mingw-w64-i686-liberime 0.0.5-2 An emacs dynamic module provide librime bindings for emacs (mingw-w64) mingw64/mingw-w64-x86_64-emacs 27.1-2 The extensible, customizable, self-documenting, real-time display editor (mingw-w64) mingw64/mingw-w64-x86_64-liberime 0.0.5-2 An emacs dynamic module provide librime bindings for emacs (mingw-w64) msys/cmake-emacs 3.19.3-1 A cross-platform open-source make system (Emacs mode) msys/emacs 27.1-2 (editors) The extensible, customizable, self-documenting, real-time display editor (msys2) msys/ninja-emacs 1.10.2-1 Ninja is a small build system with a focus on speed (Emacs mode)
To view all packages information , --sync --info
can be used . It takes an optional package name , in this case only information related to this package is shown .
$ pacman --sync --info emacs #View information related to #the emacs package . Repository : msys Name : emacs Version : 27.1-2 Description : The extensible, customizable, self-documenting, real-time display editor (msys2) Architecture : x86_64 URL : https://www.gnu.org/software/emacs/ Licenses : GPL3 Groups : editors Provides : None Depends On : ncurses zlib libxml2 libiconv libcrypt libgnutls glib2 libhogweed Optional Deps : None Conflicts With : None Replaces : None Download Size : 32.58 MiB Installed Size : 163.28 MiB Packager : CI (msys2-autobuild/6e7d6a99/328625740) Build Date : Mon Oct 26 02:56:47 2020 Validated By : MD5 Sum SHA-256 Sum Signature
Finally packages details , can be viewed on the msys2 package website .
Installing packages
A package can be installed by specifying the package name after --sync
. Multiple packages , can be installed , at the same time . A group name can also be specified , to install all packages contained in this group . A group is a set of related packages .
$ pacman --sync vim #Install the vim editor resolving dependencies... looking for conflicting packages... Packages (1) vim-8.2.1895-1 Total Download Size: 7.78 MiB Total Installed Size: 47.67 MiB :: Proceed with installation? [Y/n] y :: Retrieving packages... vim-8.2.1895-1-x... 2.5 MiB 573 KiB/s 00:09 [######---------------] .... $ pacman --sync editors #Install all the editors , found , #in the editors group . They #are emacs , nano , and vim . :: There are 3 members in group editors: :: Repository msys 1) emacs 2) nano 3) vim Enter a selection (default=all): ...
Uninstalling packages
To uninstall a package , or a group of packages , where a group is a set of packages , --remove
can be used .
$ pacman --remove vim #Remove the vim editor . checking dependencies... :: pacman-contrib optionally requires vim Packages (1) vim-8.2.1895-1 Total Removed Size: 47.67 MiB :: Do you want to remove these packages? [Y/n] y :: Processing package changes... (1/1) removing vim [#####################] 100%
Cygwin
Cygwin is a collection of open source software , such as vim
, or sed
, which uses the posix api , and which is compiled to run under windows . So this is just a collection of windows executables , or windows programs . The posix api is provided by Cygwin , via the cygwin1.dll
library .
The Cygwin installer , can be downloaded from the official website , and it can be used to install , or uninstall windows applications .
Once the package is downloaded , just double click it , this will run it . On the first screen select next , choose install from the internet , click next for the root install directory , and next for the local package directory , and next for the internet connection settings , select any download site , and click next .
In the search box , type in gcc , and then expand the package selection under Devel , and choose gcc-core
and gcc-g++
, if you want to install the Cygwin C , and C++ compilers , which have support for the posix and windows api , or mingw64-x86_64-gcc-core
, and mingw64-x86_64-gcc-g++
, to install the mingw64 C , and C++ compilers , which only support the windows api .
After that search for gdb which is used for debugging , and select it .
Next search for make , which is used to automate the compilation process , and select it .
Choose any additional packages , that you might like , for example emacs , or nano , they are both found under editors . Once , you are done selecting the packages , click next , followed by a next on the review and confirm the changes screen , and wait for the installation to finish .
Finally click on finish when prompted to create desktop , and start menu icons .
Once done , you will have a desktop icon named Cygwin64 Terminal . Just double click it to launch the terminal .
The windows drives are accessible from cygdrive/c
or cygdrive/d
…To get information about a package , clicking a package , in the package list page , will show its information . Package contents can be searched using , the Cygwin package search page .