This document shows how to create and download project files for use with the Mac tools from the command line.
Before following these instructions, you should have already downloaded and installed the CLion software (if you haven't, go back and do so).
In this section you will create and run a trivial C++ project/program (including editing it, and seeing how syntax errors are reported).
First, we will perform a one-time only setup.
Perform the following actions in your come directory (mine is Richards-MacBook-Air: ~richardepattis).
PATH="/Applications/CLion.app/Contents/bin/cmake/bin":$PATH ; export PATH
Now we will create directories for use in ICS-46, and create a trivialtest project to ensure the required operations work correctly.
#include <iostream> using namespace std; int main() { cout << "Hello, World!" << endl; return 0; }
cmake_minimum_required(VERSION 3.3.2) project(trivialtest) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") set(SOURCE_FILES main.cpp) add_executable(trivialtest ${SOURCE_FILES})
The following ~/ics46projects/trivialtest Terminal window shows all these actions (D through O).
The following Finder should appear on your screen.
You can use any combination of Mac OS and Terminal command lines to manipulate the files in this directory: whichever is simplest.
It would also be useful to make an alias to this ics46projects folder and place it conveniently on the desktop, so you can easliy reach the projects you are working on.
The following ~/ics46projects/trivialtest 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.
In this section you will download the course libraries and then download/build/run a project that contains various programs that use these libraries.
Generally, whenever you download projects, you will unzip them and then copy their directories into the directory that ics46projects shortcuts.
The following ~/ics46projects Terminal window lists these four directories.
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 Terminal window shows all these actions.
#include "driver_set.hpp" int main() { ics::DriverSet d; return 0; }
The following ~/ics46projects/test_all_data_types Terminal window shows all these actions.
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 command-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 command-c.
The following window should appear on your screen.
You can use all commands except the lf command, which is explained below. Then terminate the Terminal window.
Then, run the program from a Terminal window (connnected to the test_all_data_types directory) 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 Terminal window shows all these actions.
Note that because the directory name input files contains a space, it appears in double quotes ("input files") in this and most Terminal commands.
IMPORTANT: If a program reads data files, the root directory for the specifying the files is the directory in which the executable 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 are needed here: this is not a Terminal command).
When you double-click an executable file to run it (as you did in Step 7) it does not run the program in the expected directory; so a program run this way cannot correctly read files in that directory!
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
Rebuild/Rerun the newly uncommented .cpp file.
The following ~/ics46projects/test_all_data_types Terminal window shows all these actions.
set(CMAKE_CXX_COMPILER "/cygdrive/c/cygwin64/bin/clang++") set(CMAKE_C_COMPILER "/cygdrive/c/cygwin64/bin/clang")
These two lines are necessary on PCs to find the Clang C and C++ compilers, but they are not necessary on Macs. I want to supply just one download, and it is easier for Mac users to remove these two lines than for PC users to add them.
For this document, I provided a link to Mac-compatible CMakeLists.txt files, so this operation was unneeded.
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.