目录结构
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