码迷,mamicode.com
首页 > 其他好文 > 详细

Makefile应用之Complicated工程

时间:2019-10-06 22:09:13      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:tar   int   flag   making   51cto   wildcard   def   嵌入式软件   exe   

参考《专业嵌入式软件开发》中Makefile的complicated工程代码。

工程目录结构如下:

.
├── define.h
├── foo.c
├── foo.h
├── main.c
└── Makefile

1.Makefile

MKDIR := mkdir
RM := rm
RMFLAGS := -fr
CC := gcc


DIR_OBJS = objs
DIR_TARGET = exes
DIR_DEPS = deps
TARGET = complicated

DIRS = $(DIR_OBJS) $(DIR_TARGET) $(DIR_DEPS)
SRCS = $(wildcard *.c)

TARGET := $(addprefix $(DIR_TARGET)/,$(TARGET))

#OBJS = $(SRCS:.c=.o)
OBJS = $(patsubst %.c,%.o,$(SRCS))
OBJS := $(addprefix $(DIR_OBJS)/,$(OBJS))

DEPS = $(patsubst %.c,%.dep,$(SRCS))
DEPS := $(addprefix $(DIR_DEPS)/,$(DEPS))

all:$(TARGET)

# 把依赖文件包含进来
ifneq ($(MAKECMDGOALS),clean)
-include $(DEPS)
endif


$(TARGET):$(OBJS)
    @echo "DEPS is $(DEPS)"
    @echo "making $@"
    $(MKDIR) -p $(DIR_TARGET)
    $(CC) -o $@ $(filter %.o,$^)

$(DIR_DEPS)/%.dep:%.c  
    @echo "Making $@"    
    $(MKDIR) -p $(DIR_DEPS)
    $(CC) -MM -MT $(addprefix $(DIR_OBJS)/,$(patsubst %.c,%.o,$<)) $@ -MF $@ $<


$(DIR_OBJS)/%.o: %.c
    @echo "making $@"
    $(MKDIR) -p $(DIR_OBJS)
    $(CC) -c -o $@ $<


clean:
    $(RM) $(RMFLAGS)  $(DIRS) 
.PHONY: all clean

2.main.c

#include <stdio.h>
void foo();
int main()
{
    printf("This is main()!\r\n");

    foo();

    return 0;
    
}

3.foo.c

#include <stdio.h>
#include "foo.h"

void foo()
{
    printf("This is foo()!MYFOO is %d\r\n",MYFOO);

}

4.foo.h

#ifndef __FOO_H
#define __FOO_H
#include "define.h"
//#define   MYFOO          160
void foo();

#endif

5.define.h

#ifndef __DEFINE_H
#define __DEFINE_H


#define MYFOO    120

#endif

 

Makefile应用之Complicated工程

标签:tar   int   flag   making   51cto   wildcard   def   嵌入式软件   exe   

原文地址:https://www.cnblogs.com/yangjiguang/p/11628683.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!