Makefile应用之Complicated工程

Posted yangjiguang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Makefile应用之Complicated工程相关的知识,希望对你有一定的参考价值。

参考《专业嵌入式软件开发》中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工程的主要内容,如果未能解决你的问题,请参考以下文章

QT软件开发之入门基础--1.9 pro工程标准写法

RealEvo IDE专家模式下应用工程MakeFile的修改

Makefile研究 —— 实际应用

将含有makefile文件的源码加入Eclipse工程

Android之makefile

嵌入式Linux开发之Makefile