文档结构,项目文件下,包含 src,bin include lib 等文件下,其中src文件,包含相应的c文件,include中包含.h文件。
Makefile文件至于,项目文件目录下。
----project //文件夹顶层
-----bin //放置生成后的 *.d 以及*.o 文件,在终端键入 make install 即可。
-----src //放置所有的 源文件,可以包含相应的子目录
----main
---main.c
----subdir1
---function_add.c
---function_sub.c
----include //放置所有的.h文件,
---- function.h
-----lib //放置库文件 *.a *.so
PRGM = main
CROSS_COMPLIE=
CC = $(CROSS_COMPLIE)gcc
MV := mv
#CFLAGS C语言编译器参数,编译时使用。
#CFLAGS := -c -g -W -Wall
# 指定额外搜索的头文件路径、库文件路径 、引入的库
########################################################################################
#-Iinclude
#指定搜索路径, 也可用include指定具体文件路径,编译时使用
# The include files ( C and C++ common).
#-I./include -I./include/app -I./include/tools \
# -I./include/tools/file -I./include/tools/common
INCLUDES := -Iinclude #include 搜索路径
#当前文件下自动搜索 .a .so库文件
LIBA := $(shell find . -name *.a)
LIBA += $(shell find . -name *.so)
CPPFLAGS =
LDFLAGS = -lrt -lz
CFLAGS = -Wall -ggdb3 $(INCLUDES)
COMPILE = $(CC) $(CPPFLAGS) $(CFLAGS) -c
LINKCC = $(CC) $(LDFLAGS)
#定义安装目录
BIN := ./bin
SRCS := $(shell find . -name *.c)
DEPS := $(patsubst %.c,%.d,$(SRCS))
OBJS := $(patsubst %.c,%.o,$(SRCS))
all:$(PRGM)
$(PRGM):$(OBJS) $(DEPS)
$(LINKCC) $(OBJS) $(LIBA) -o $(PRGM)
%.d:%.c
$(CC) -MM $(CPPFLAGS) $(CFLAGS) $< > $@
%.o:%.c
$(COMPILE) $< -o $@
.PHONY:cleanall
cleanall:
rm -f $(OBJS) $(DEPS) $(PRGM) $(shell find . -name *.o) $(shell find . -name *.d)
.PHONY:clean
clean:
rm -f $(OBJS) $(DEPS)
explain:
@echo "The information represents in the program:"
@echo "Final executable name: $(PRGM)"
@echo "Source files: $(SRCS)"
@echo "Object files: $(OBJS)"
@echo "Include files: $(INCLUDES)"
depend:$(DEPS)
@echo "Dependencies are now up-to-date"
-include $(DEPS)
#将目标文件及可执行程序拷贝到安装目录
install :
#-${MV} ${PRGM} ${BIN}
-${MV} $(shell find . -name *.o) ${BIN}
-${MV} $(shell find . -name *.d) ${BIN}
测试文件
src/main/main.c
#include <stdio.h>
#include "add.h"
#include "sub.h"
int main(void)
{
//int input = 0;
int a = 10, b = 12;
float x= 1.23456,y = 9.87654321;
printf("int a+b IS:%d\n",add_int(a,b));
printf("float x+y IS:%f\n",add_float(x,y));
return 0;
}
include/add.h
#ifdef __ADD_H__
#define __ADD_H__
extern int add_int(int a, int b);
extern float add_float(float a, float b);
#endif
src/add/add_int.c
int add_int(int a, int b)
{
return a+b;
}
src/add/add_float.c
int add_float(float a, float b)
{
return a+b;
}