This is the method for making an executable file from non-source file/s of a program. The important keywords that we must bear in mind are: target, source (what we require) and action. It's very simple, actually. It is like when you want to cook, you will decide the menu, what ingredients do you need and actions you will take to prepare your delicious food. So, the steps for using 'make' are also as simple as that. Here, I will explain how to use 'make' in a simpler manner.
Step 1: Create any *.c file/s using VI editor.
You can try the given program if you want to. Here, I will give an example which involving subroutine (aka call function). Because, in real program, we always face a problem of having very lengthy and disorder sourcecode. So, by using subroutine, it will make your life much more easier. Trust me!!
emelia@ffv3vf:~$vi script.c #include <stdio.h> void function(void); int main() { printf("\n Hello."); printf("\n How are you?"); function(); // call function }
Then, create other *.c file to store your subroutine.
emelia@ffv3vf:~$vi call.c #include <stdio.h> void function(void); { printf("\n Good Luck and Have Fun"); }Therefore, you will have 2 new files; script.c and call.c
Step 2: Create Makefile file using VI editor.
When you write a program, you will need a Makefile for it, so that, it is possible to use 'make' to build and install the program.This Makefile will lists all the files and how to compute it from other files. Then, 'make' will get its knowledge of how to build your program from this Makefile. The basic syntax of Makefile can be illustrated as follows:
target : requirement action
So, our Makefile will look like this:
emelia@ffv3vf:~$vi Makefile script : script.o call.o gcc -o script script.o call.o script.o : script.c gcc -c script.c call.o : call.c gcc -c call.c clean : rm script rm *.o
Flow: script.c file (source code) --> script.o file (object file) --> script* (binary file)
Command: gcc -c script.c gcc -o script script.o call.o gcc -c call.c
Step 3: Execute the program
First of all, list the files in your directory. Later, you will see the differences.
emelia@ffv3vf:~$ ls -l total 12 -rw-r--r-- 1 emelia users 187 2006-07-04 11:32 Makefile -rw-r--r-- 1 emelia users 86 2006-07-04 11:31 call.c -rw-r--r-- 1 emelia users 161 2006-07-04 11:24 script.c
emelia@ffv3vf:~$ make gcc -c script.c gcc -c call.c gcc -o script script.o call.o
Then, list again all the files.
emelia@ffv3vf:~$ ls -l total 32 -rw-r--r-- 1 emelia users 152 2006-07-04 11:36 Makefile -rw-r--r-- 1 emelia users 91 2006-07-04 11:39 call.c -rw-r--r-- 1 emelia users 844 2006-07-04 11:40 call.o -rwxr-xr-x 1 emelia users 11191 2006-07-04 11:40 script* -rw-r--r-- 1 emelia users 161 2006-07-04 11:37 script.c -rw-r--r-- 1 emelia users 920 2006-07-04 11:40 script.o
emelia@ffv3vf:~$./script Hello. How are you? Good Luck and Have Fun!!
Remember that we also define 'clean' command in our Makefile. So, when we want to remove any file, we can simply do so by using 'make clean' command.
emelia@ffv3vf:~$ make clean rm script rm *.o emelia@ffv3vf:~$ ls -l total 12 -rw-r--r-- 1 emelia users 152 2006-07-04 11:36 Makefile -rw-r--r-- 1 emelia users 91 2006-07-04 11:39 call.c -rw-r--r-- 1 emelia users 161 2006-07-04 11:37 script.cThere you go! No more object and binary files in our list. If you want to execute the program again, just 'make' and repeat the same step.