นี่คือตัวอย่าง makefile แบบเต็ม:
makefile
TARGET = prog
$(TARGET): main.o lib.a
gcc $^ -o $@
main.o: main.c
gcc -c $< -o $@
lib.a: lib1.o lib2.o
ar rcs $@ $^
lib1.o: lib1.c lib1.h
gcc -c -o $@ $<
lib2.o: lib2.c lib2.h
gcc -c -o $@ $<
clean:
rm -f *.o *.a $(TARGET)
อธิบาย makefile:
target: prerequisites
- หัวหน้ากฎ
$@
- หมายถึงเป้าหมาย
$^
- หมายถึงข้อกำหนดเบื้องต้นทั้งหมด
$<
- หมายถึงข้อกำหนดเบื้องต้นแรกเท่านั้น
ar
- เครื่องมือ Linux เพื่อสร้างแก้ไขและสารสกัดจากจากที่เก็บไว้ดูหน้าคนสำหรับข้อมูลเพิ่มเติม ตัวเลือกในกรณีนี้หมายถึง:
r
- แทนที่ไฟล์ที่มีอยู่ในที่เก็บถาวร
c
- สร้างที่เก็บถาวรหากยังไม่มีอยู่
s
- สร้างดัชนีออบเจ็กต์ไฟล์ลงในไฟล์เก็บถาวร
สรุป : ไลบรารีแบบคงที่ภายใต้ Linux ไม่ได้เป็นอะไรมากไปกว่าที่เก็บไฟล์อ็อบเจ็กต์
main.c โดยใช้ lib
#include <stdio.h>
#include "lib.h"
int main ( void )
{
fun1(10);
fun2(10);
return 0;
}
lib.h ส่วนหัวหลักของ libs
#ifndef LIB_H_INCLUDED
#define LIB_H_INCLUDED
#include "lib1.h"
#include "lib2.h"
#endif
lib1.c แหล่งแรก lib
#include "lib1.h"
#include <stdio.h>
void fun1 ( int x )
{
printf("%i\n",x);
}
lib1.h ส่วนหัวที่เกี่ยวข้อง
#ifndef LIB1_H_INCLUDED
#define LIB1_H_INCLUDED
#ifdef __cplusplus
extern “C” {
#endif
void fun1 ( int x );
#ifdef __cplusplus
}
#endif
#endif
lib2.c แหล่งที่สอง lib
#include "lib2.h"
#include <stdio.h>
void fun2 ( int x )
{
printf("%i\n",2*x);
}
lib2.h ส่วนหัวที่เกี่ยวข้อง
#ifndef LIB2_H_INCLUDED
#define LIB2_H_INCLUDED
#ifdef __cplusplus
extern “C” {
#endif
void fun2 ( int x );
#ifdef __cplusplus
}
#endif
#endif