makefile

目录结构
pro--
main.c
dir--
add.h add.c
include--
test_static.h
static--
libstatic.a

main.c

#include <stdio.h>
#include <add.h>
#include <test_static.h>
#include <pthread.h>

static void* test_thread(void*);

int main()
{
    int num = 100;
#ifdef _TEST_NUM
    num += 100;
#else
    num *= 100;
#endif
    printf("num=%d\n", num);
    printf("add=%d\n", add(2, 3));
    printf("power=%d\n", power(3, 4));
    pthread_t tid;
    pthread_create(&tid, NULL, test_thread, NULL);
    return 0;
}

void* test_thread(void* arg)
{
    return NULL;
}

makefile

all : main
.PHONY : clean

CFLAGS = -std=c99              # c99
CFLAGS += -L./static           #静态库的位置
LDFLAGS += -lpthread
LDFLAGS += -lstatic            #链接static库
#CFLAGS += -static
CFLAGS += -ggdb              #生成调试信息
CFLAGS += -D_TEST_NUM  #定义宏
#CFLAGS += -Wall         #生成更多的警告
CFLAGS += -Werror     #将警告视为错误
CFLAGS += -Idir          #头文件位置
CFLAGS += -Iinclude
#头文件路径
CFLAGS += -I .

# 包含当前目录 和子目录dir下的所以.c文件
SRCS = $(wildcard *.c dir/*.c)
#把.c文件变成对应的.o文件 赋给OBJS变量
OBJS = $(patsubst %c, %o, $(SRCS))
ALL:
    @echo $(SRCS)
    @ehco $(OBJS)


TARGET = main

# $@--目标文件 @^--所有依赖的文件 @<--第一个依赖的文件
# 链接库必须放在 .o 文件的后面 不会链接错误

$(TARGET) : $(OBJS)
    cc $(CFLAGS) -o $@ $^ ${LDFLAGS}
%o:%c
    cc $(CFLAGS) -o $@ -c $<

clean:
    rm $(TARGET) *.o
    

推荐阅读更多精彩内容