Command Line Cygwin Tools


This document shows how to create and download project files for use with the Cygwin tools from the command line.


Section 1) Testing the Cygwin Toolset and Clang

In this section you will create and run a trivial C++ project/program (including editing it, and seeing how syntax errors are reported).

  1. Click the (Cygwin64 Terminal icon). Perform the following actions in your come directory (mine is pattis@pattishome12).

    The following ~/ics46projects/trivialtest Cygwin64 Terminal window shows all these actions.

    If you do not see the clang and clang++ compilers listed here, you might have multiple C/C++ compilers on your computer, and Cygwin is using the wrong one. In such a case, edit the MakeLists.txt file (specified above) to contain the following two set commands between the cmake_mininum_required and project commands.

      cmake_minimum_required(VERSION 3.3.2)
    
      set(CMAKE_CXX_COMPILER "/cygdrive/c/cygwin64/bin/clang++")
      set(CMAKE_C_COMPILER "/cygdrive/c/cygwin64/bin/clang")
    
      project(trivialtest)
    Then execute the 2 commands rm -f -r CMakeFiles and rm CMakeCache.txt and repeat the commands above, starting at cmake .

  2. Open a Windows file Explorer Window and navigate to the C:\cygwin\home\yourname\ics46projects\trivialtest directory, which is the same as the one manipulated using Cygwin.

    The following Explorer window should appear on your screen.

    You can use any combination of Windows and Cygwin commands to manipulate the files in this directory: whichever is simplest.

  3. Edit, rebuild, and rerun the main.cpp program,

    The following ~/ics46projects/trivialtest Cygwin64 Terminal window shows all these actions.

  4. Create a syntax error (remove the ; at the end of the cout line), and then follow the rebuilding/rerunning steps above The following ~/ics46projects/trivialtest Cygwin64 Terminal window shows all these actions.

    The failed results of attempting to rebuild the program appear after the make command. In this case, the Clang compiler accurately indicates the source of the error. I have lengthened the window so as not cause lines to wrap.

We will now continue by learning how to download a project and run it. During the quarter, you will be asked to do this for all programming assignments and many quizzes.


Section 2) Testing Downloadable Projects with the Course Libraries

In this section you will download the course libraries and then download/build/run a project that contains various programs that use these libraries.

  1. Create a shortcut named ics46projects to the directory C:\cygwin\home\yourname\ics46projects and place it on your desktop near the (Cygwin64 Terminal icon).

  2. Download and unzip the file template; Copy its three directories (courselib, googletestlib, and test_all_data_types) into the directory that ics46projects shortcuts; it should already contain the trivialtest directory, created by the operations above.

    Generally, whenever you download projects, you will unzip them and then copy their directories into the directory that ics46projects shortcuts.

    The following ~/ics46projects Cygwin64 Terminal window lists these four directories.

  3. Connect to the test_all_data_types directory, by using the cd command. Hint: type only cd te and then press the tab key and Cygwin should complete the name of this directory; generally using tab for directory/file name completion can drastically reduce your typing in Cygwin.

    List the contents of the ics46project/test_all_data_types directory, by using the ls command. Notice that this project folder contiains various .cpp files and a CMakeLists.txt file

    The following ~/ics46projects/test_all_data_types Cygwin64 Terminal window shows all these actions.

  4. Edit the driver.cpp file by uncommenting lines 30-35, so they appear as follows
    #include "driver_set.hpp"
    
    int main() {
      ics::DriverSet d;
      return 0;
    }

  5. Build and run the main.cpp program,

    The following ~/ics46projects/test_all_data_types Cygwin64 Terminal window shows all these actions.

    If you do not see the clang and clang++ compilers listed here, you might have multiple C/C++ compilers on your computer, and Cygwin is using the wrong one. In such a case, edit the MakeLists.txt file (see part 3 above) to contain the following two set commands between the cmake_mininum_required and project commands.

      cmake_minimum_required(VERSION 3.3.2)
    
      set(CMAKE_CXX_COMPILER "/cygdrive/c/cygwin64/bin/clang++")
      set(CMAKE_C_COMPILER "/cygdrive/c/cygwin64/bin/clang")
    
      project(test_all_data_types)
    Then execute the 2 commands rm -f -r CMakeFiles and rm CMakeCache.txt and repeat the commands above, starting at cmake .

    Experiment with this driver by entering commands (and their arguments, when prompted) to better understand the set data type. You can enter the q command to terminate the driver, or you can type ctrl-c to terminate the driver.

    I suggest that you try terminating the driver with a q command; then, rerun the program and terminate it with ctrl-c.

  6. Recall in Item 1 (at the top of this section) you created a shortcut named ics46projects to the directory C:\cygwin\home\yourname\ics46projects; we will now briefly explore the contents of this folder. Explore (double-click) the short-cut and double-click on the test_all_data_types folder.

    The following explorer window should appear on your screen.

  7. Double-click the test_all_data_types.exe file to run this program in Windows, outside of Cygwin. The following MS-DOS window should appear on your screen.

    If the error pop-window

    appears, you must also add C:\cygwin64\bin to the user variable PATH, briefly illustrated below (also see step 15 in the Cygwin handout).

    Experiment with this driver by entering commands (and their arguments, when prompted); it runs as it did in Cygwin. Note that when you enter the q command or ctrl-c, the program terminates and the MS-DOS window disappears.

    So, when a program we run under Cygwin terminates, the screen retains the information printed (by cout) after the run terminates, but when we run it directly in an MS-DOS window, the window disappears after the run terminates. For example, if you find the trivialtest.exe file and run it by double-clicking this file, its MS-DOS windo will run and then immediately disappear.

  8. Find the 'input files' directory in the test_all_data_types folder and copy all of its .txt data files up one level in the directory (the one that contains the test_all_data_types.exe file).

    Then, run the program (either in the Cygwin or a MS-DOS window) and issue the lf command (load from file); when prompted for the file name, just press the enter key to choose the default (loadset.txt).

    The following ~/ics46projects/test_all_data_types Cygwin64 Terminal window shows all these actions.

    Note that because the directory name input files contains a space, it appears in single quotes ('input files') and must appear in single quotes in all Cygwin commands.

    IMPORTANT: If a program reads data files, the root directory for the specifying the files is the directory in which the .exe file appears. It is simplest to copy all the data files into this directory. An alternative would be to leave the files in the input files directory, and enter their names like input files/loadset.txt (note no quotes here: this is not a Cygwin command).

  9. A typical project folder may have more than one .cpp file with a main function (as test_all_data_types has). Only one of these .cpp files can have its main function uncommented, otherwise the build will fail. When working on project, it is typical to

    1. Comment-out code in one .cpp file.
    2. Uncomment code in another .cpp file.
    3. Rebuild/Rerun the newly uncommented .cpp file.

    In the test_all_data_types project folder, the driver.cpp file has many main functions: we uncommented one (in step 4) to allow us to run the Set driver. If more than one main function is uncommented, attempting to build the code will result in the compiler specifying a redefinition of 'main' error.

    The test_all_data_types project folder also contains many .cpp files (their names all start with test) that each contain one main function (each is a Googletest for one data type). If more than one file contains a main function, attempting to build the code will result in the linker specifying a multiple definition of 'main' error.

    To switch this project from running the Set driver to the Set Googletest

    1. Edit the driver.cpp file and comment-out lines 30-35.
    2. Edit the test_set.cpp file and uncomment all its lines.
      Most program editors have a special command that allows commenting on selected lines to be toggeled.

    Rebuild/Rerun the newly uncommented .cpp file.

    The following ~/ics46projects/test_all_data_types Cygwin64 Terminal window shows all these actions.

We are now at the end of this handout. You will not need to repeat the first two sections during the course, but you will frequently download project folders and use them as demonstrated in section 2.