The Edit-Compile-Run Cycle

The Edit-Compile-Run Cycle

The Edit-Compile-Run Cycle EECS 211 Winter 2018 So you’ve written a program: #include <iostream> int main() f std::cout << "Hello, world\n"; g What now? 2 Compilation We need to translate our program from • source code (e.g., C++, human readable) to • machine code (machine executable). compiler source code machine code 3 $ mkdir eecs211 $ cd eecs211 $ emacs -nw hello.cpp $ cat hello.cpp #include <iostream> int main() f std::cout << "Hello, world\n"; g $ c++ hello.cpp -o hello $ ./hello Hello, world! $ Compilation in the shell $ exec scl enable devtoolset-4 tcsh 4 mkdir eecs211 $ cd eecs211 $ emacs -nw hello.cpp $ cat hello.cpp #include <iostream> int main() f std::cout << "Hello, world\n"; g $ c++ hello.cpp -o hello $ ./hello Hello, world! $ Compilation in the shell $ exec scl enable devtoolset-4 tcsh $ 4 $ cd eecs211 $ emacs -nw hello.cpp $ cat hello.cpp #include <iostream> int main() f std::cout << "Hello, world\n"; g $ c++ hello.cpp -o hello $ ./hello Hello, world! $ Compilation in the shell $ exec scl enable devtoolset-4 tcsh $ mkdir eecs211 4 cd eecs211 $ emacs -nw hello.cpp $ cat hello.cpp #include <iostream> int main() f std::cout << "Hello, world\n"; g $ c++ hello.cpp -o hello $ ./hello Hello, world! $ Compilation in the shell $ exec scl enable devtoolset-4 tcsh $ mkdir eecs211 $ 4 $ emacs -nw hello.cpp $ cat hello.cpp #include <iostream> int main() f std::cout << "Hello, world\n"; g $ c++ hello.cpp -o hello $ ./hello Hello, world! $ Compilation in the shell $ exec scl enable devtoolset-4 tcsh $ mkdir eecs211 $ cd eecs211 4 emacs -nw hello.cpp $ cat hello.cpp #include <iostream> int main() f std::cout << "Hello, world\n"; g $ c++ hello.cpp -o hello $ ./hello Hello, world! $ Compilation in the shell $ exec scl enable devtoolset-4 tcsh $ mkdir eecs211 $ cd eecs211 $ 4 $ cat hello.cpp #include <iostream> int main() f std::cout << "Hello, world\n"; g $ c++ hello.cpp -o hello $ ./hello Hello, world! $ Compilation in the shell $ exec scl enable devtoolset-4 tcsh $ mkdir eecs211 $ cd eecs211 $ emacs -nw hello.cpp 4 cat hello.cpp #include <iostream> int main() f std::cout << "Hello, world\n"; g $ c++ hello.cpp -o hello $ ./hello Hello, world! $ Compilation in the shell $ exec scl enable devtoolset-4 tcsh $ mkdir eecs211 $ cd eecs211 $ emacs -nw hello.cpp $ 4 #include <iostream> int main() f std::cout << "Hello, world\n"; g $ c++ hello.cpp -o hello $ ./hello Hello, world! $ Compilation in the shell $ exec scl enable devtoolset-4 tcsh $ mkdir eecs211 $ cd eecs211 $ emacs -nw hello.cpp $ cat hello.cpp 4 c++ hello.cpp -o hello $ ./hello Hello, world! $ Compilation in the shell $ exec scl enable devtoolset-4 tcsh $ mkdir eecs211 $ cd eecs211 $ emacs -nw hello.cpp $ cat hello.cpp #include <iostream> int main() f std::cout << "Hello, world\n"; g $ 4 $ ./hello Hello, world! $ Compilation in the shell $ exec scl enable devtoolset-4 tcsh $ mkdir eecs211 $ cd eecs211 $ emacs -nw hello.cpp $ cat hello.cpp #include <iostream> int main() f std::cout << "Hello, world\n"; g $ c++ hello.cpp -o hello 4 ./hello Hello, world! $ Compilation in the shell $ exec scl enable devtoolset-4 tcsh $ mkdir eecs211 $ cd eecs211 $ emacs -nw hello.cpp $ cat hello.cpp #include <iostream> int main() f std::cout << "Hello, world\n"; g $ c++ hello.cpp -o hello $ 4 Hello, world! $ Compilation in the shell $ exec scl enable devtoolset-4 tcsh $ mkdir eecs211 $ cd eecs211 $ emacs -nw hello.cpp $ cat hello.cpp #include <iostream> int main() f std::cout << "Hello, world\n"; g $ c++ hello.cpp -o hello $ ./hello 4 Compilation in the shell $ exec scl enable devtoolset-4 tcsh $ mkdir eecs211 $ cd eecs211 $ emacs -nw hello.cpp $ cat hello.cpp #include <iostream> int main() f std::cout << "Hello, world\n"; g $ c++ hello.cpp -o hello $ ./hello Hello, world! $ 4 We’ll use a software building system called CMake to do all this for us Build management As programs get larger, builds get more complicated: • More files to compile, in complex combinations • Want to just recompile the changed files • Different compilers/machines want different options and work differently 5 Build management As programs get larger, builds get more complicated: • More files to compile, in complex combinations • Want to just recompile the changed files • Different compilers/machines want different options and work differently We’ll use a software building system called CMake to do all this for us 5 Getting a CMake project onto EECS You can download an example CMake project from the course website: $ cd eecs211 $ wget http://users.eecs.northwestern.edu/∼jesse/ course/eecs211/lec/01compile.zip . (No line break in the wget command—that’s one long URL.) $ unzip 01compile.zip . $ cd 01compile $ ls CMakeLists.txt hello.cpp $ 6 Setting up CMake You should have a project directory with a CMakeLists.txt file in it, like from the previous slide. Change to that directory. Then once, to set up CMake: $ cd eecs211/01compile $ mkdir build $ cd build $ ∼jesse/pub/bin/cmake .. −− The CXX compiler identification is GNU 5.3.1 . −− Configuring done −− Generating done −− Build files have been written to: /home/jesse/eecs211/01compile/build $ 7 After editing hello.cpp you can use make hello to build again. Building with CMake Change directories to the CMake build directory. Use the make command to build, then run your program. $ cd eecs211/01compile/build $ make hello Scanning dependencies of target hello [ 50%] Building CXX object CMakeFiles/hello.dir/ hello.cpp.o [100%] Linking CXX executable hello [100%] Built target hello $ ./hello Hello, world. $ 8 Building with CMake Change directories to the CMake build directory. Use the make command to build, then run your program. $ cd eecs211/01compile/build $ make hello Scanning dependencies of target hello [ 50%] Building CXX object CMakeFiles/hello.dir/ hello.cpp.o [100%] Linking CXX executable hello [100%] Built target hello $ ./hello Hello, world. $ After editing hello.cpp you can use make hello to build again. 8.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    23 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us