ada-mode: No project files

 
 6.1 No project files
 ====================
 
 This example uses no project files.
 
    First, create a directory ‘Example_1’, containing:
 
    ‘hello.adb’:
 
      with Ada.Text_IO;
      procedure Hello
      is begin
         Put_Line("Hello from hello.adb");
      end Hello;
 
    Yes, this is missing “use Ada.Text_IO;” - we want to demonstrate
 compiler error handling.
 
    ‘hello_2.adb’:
 
      with Hello_Pkg;
      procedure Hello_2
      is begin
         Hello_Pkg.Say_Hello;
      end Hello_2;
 
    This file has no errors.
 
    ‘hello_pkg.ads’:
 
      package Hello_Pkg is
         procedure Say_Hello;
      end Hello_Pkg;
 
    This file has no errors.
 
    ‘hello_pkg.adb’:
 
      with Ada.Text_IO;
      package Hello_Pkg is
         procedure Say_Hello
         is begin
            Ada.Text_IO.Put_Line ("Hello from hello_pkg.adb");
         end Say_Hello;
      end Hello_Pkg;
 
    Yes, this is missing the keyword ‘body’; another compiler error
 example.
 
    In buffer ‘hello.adb’, invoke ‘Ada | Check file’.  You should get a
 ‘*compilation*’ buffer containing something like (the directory paths
 will be different):
 
      cd c:/Examples/Example_1/
      gnatmake -u -c -gnatc -g c:/Examples/Example_1/hello.adb -cargs -gnatq -gnatQ
      gcc -c -Ic:/Examples/Example_1/ -gnatc -g -gnatq -gnatQ -I- c:/Examples/Example_1/hello.adb
      hello.adb:4:04: "Put_Line" is not visible
      hello.adb:4:04: non-visible declaration at a-textio.ads:264
      hello.adb:4:04: non-visible declaration at a-textio.ads:260
      gnatmake: "c:/Examples/Example_1/hello.adb" compilation error
 
    If you have enabled font-lock, the lines with actual errors (starting
 with ‘hello.adb’) are highlighted, with the file name in red.
 
    Now type ‘C-x `’ (on a PC keyboard, <`> is next to <1>).  Or you can
 click the middle mouse button on the first error line.  The compilation
 buffer scrolls to put the first error on the top line, and point is put
 at the place of the error in the ‘hello.adb’ buffer.
 
    To fix the error, change the line to be
 
          Ada.Text_IO.Put_Line ("hello from hello.adb");
 
    Now invoke ‘Ada | Show main’; this displays ‘Ada mode main: hello’.
 
    Now (in buffer ‘hello.adb’), invoke ‘Ada | Build’.  You are prompted
 to save the file (if you haven’t already).  Then the compilation buffer
 is displayed again, containing:
 
      cd c:/Examples/Example_1/
      gnatmake -o hello hello -g -cargs -gnatq -gnatQ -bargs  -largs
      gcc -c -g -gnatq -gnatQ hello.adb
      gnatbind -x hello.ali
      gnatlink hello.ali -o hello.exe -g
 
    The compilation has succeeded without errors; ‘hello.exe’ now exists
 in the same directory as ‘hello.adb’.
 
    Now invoke ‘Ada | Run’.  A ‘*run*’ buffer is displayed, containing
 
      Hello from hello.adb
 
      Process run finished
 
    That completes the first part of this example.
 
    Now we will compile a multi-file project.  Open the file
 ‘hello_2.adb’, and invoke ‘Ada | Set main and Build’.  This finds an
 error in ‘hello_pkg.adb’:
 
      cd c:/Examples/Example_1/
      gnatmake -o hello_2 hello_2 -g -cargs -gnatq -gnatQ -bargs  -largs
      gcc -c -g -gnatq -gnatQ hello_pkg.adb
      hello_pkg.adb:2:08: keyword "body" expected here [see file name]
      gnatmake: "hello_pkg.adb" compilation error
 
    This demonstrates that gnatmake finds the files needed by the main
 program.  However, it cannot find files in a different directory, unless
 you use an Emacs Ada mode project file to specify the other directories;
DONTPRINTYET  SeeSet source search path, or a GNAT project file; *noteUse GNAT
DONTPRINTYET  SeeSet source search path, or a GNAT project file; SeeUse GNAT

 project file.
 
    Invoke ‘Ada | Show main’; this displays ‘Ada mode main: hello_2’.
 
    Move to the error with ‘C-x `’, and fix the error by adding ‘body’:
 
      package body Hello_Pkg is
 
    Now, while still in ‘hello_pkg.adb’, invoke ‘Ada | Build’.  gnatmake
 successfully builds ‘hello_2’.  This demonstrates that Emacs has
 remembered the main file, in the project variable ‘main’, and used it
 for the Build command.
 
    Finally, again while in ‘hello_pkg.adb’, invoke ‘Ada | Run’.  The
 ‘*run*’ buffer displays ‘Hello from hello_pkg.adb’.
 
    One final point.  If you switch back to buffer ‘hello.adb’, and
 invoke ‘Ada | Run’, ‘hello_2.exe’ will be run.  That is because ‘main’
 is still set to ‘hello_2’, as you can see when you invoke ‘Ada | Project
 | Edit’.
 
    There are three ways to change ‘main’:
 
   1. Invoke ‘Ada | Set main and Build’, which sets ‘main’ to the current
      file.
 
   2. Invoke ‘Ada | Project | Edit’, edit ‘main’, and click ‘[save]’
 
   3. Invoke ‘Ada | Project | Load’, and load a project file that
      specifies ‘main’