2020年12月24日 星期四

makefile hello 多檔編譯

 

makefile
hello
src/main.c    src/main.h
src/fun2.c    src/fun2.h
obj/*.o

main.c

#include <stdio.h>
#include "main.h"
#include "fun2.h"
int main(void){
    printf("Hello !\r\n");
    fun2();
    return 0;
}

main.h
int main(void);

fun2.c

#include <stdio.h>
#include "fun2.h"
int fun2(void){
    printf("Hello  2!\r\n");
    return 0;
}

fun2.h
int fun2(void);

makefile

CC:=g++
INCLUDE:=.
CFLAGS= -g -Wall -ansi
SRC_BASE_DIR:=./src/
OBJ_BASE_DIR:=./obj/
OBJ:= $(OBJ_BASE_DIR)main.o \
    $(OBJ_BASE_DIR)fun2.o
TARGET:=hello

hello: $(OBJ)
    $(CC) $(CFLAGS) -o $(TARGET) $(OBJ) -B $(OBJ_BASE_DIR)

$(OBJ_BASE_DIR)%.o: $(SRC_BASE_DIR)%.c
    mkdir -p $(OBJ_BASE_DIR)
    $(CC) $(CFLAGS) -c $^ -o $@

.PHONY: clean
clean:
    rm -f *.o hello
    rm -f $(OBJ_BASE_DIR)*.o
    rmdir $(OBJ_BASE_DIR)


沒有留言: