高手来 Makefile中编译连接的问题 在线等

来源:百度知道 编辑:UC知道 时间:2024/05/26 23:54:31
工程如下:
主文件夹:test
主文件夹test下有两个文件夹和一个Make.defines文件,两个文件夹分别是:lib,sources。
lib文件夹下有如下文件:my_include.h,swap.c,Makefile三个文件
sources文件夹下有如下文件:test.c,Makefile两个文件

test文件夹中
Make.defines内容如下:
CC = gcc
CFLAGS = -I ../lib -g -O2 -D_REENTRANT -Wall

PRO := test.c
SOURCES = ${filter-out ${wildcard *.c}, ${PRO}}
OBJS = ${patsubst %.c, %.o, ${SOURCES}}

CLEANFILES = *.o

lib文件夹中
my_include.h内容如下:
#include <stdio.h>

void swap(int *,int *);

swap.c内容如下:
#include "my_include.h"

void swap(int *p1, int *p2)
{
int temp;
temp = *p1;
*p1 = *p2;
*p2 = temp;
}

Makefile内容如下:
#include ../Make.defines

LIB_SOURCES = ${wildcard *.c}
LIB_OBJS = ${patsubst %.c, %.o, ${LIB_SOURCES}}

Make.defines文件
-----------------------------------------------
CC = gcc
LIBS_PATH = ../lib
LIBS_SRC=${wildcard $(LIBS_PATH)/*.c}
LIBS_OBJ=${patsubst %.c, %.o, ${LIBS_SRC}}
CFLAGS = -I${LIBS_PATH} -g -O2 -D_REENTRANT -Wall
PRO := test.c
SOURCES = ${filter-out ${wildcard *.c}, ${PRO}}
OBJS = ${patsubst %.c, %.o, ${SOURCES}}
CLEANFILES = *.o
===============================================
source目录的Makefile文件
-----------------------------------------------
include ../Make.defines
include ${OBJS}
all: test

test:test.o ${LIBS_OBJ}
${CC} ${CFLAGS} $? -o $@
${LIBS_OBJ}:${LIBS_SRC}
make -C ${LIBS_PATH}
test.o:test.c
${CC} ${CFLAGS} -c $< -o $@
clean:
rm ${CLEANFILES}
remove:
rm ${all}
===============================================