多目录下,单makefile文档编程

来源:互联网 发布:yum 安装vim 编辑:程序博客网 时间:2024/05/21 09:03


文档结构,项目文件下,包含 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;  
}





0 0
原创粉丝点击