您的位置:首页 > 运维架构 > Linux

linux下C工程层级目录的Makefile编写

2013-04-25 15:42 288 查看
以前在ubuntu的gcc写小型的测试程序,都是直接调用gcc命令及其选项,突然有想完成稍大的工程的冲动,于是用了下makefile,果然强大。

目录包含 bin src inc lib obj , makefile文件与它们同级,是事先设置好的,以下为源码文件:

exchange.h

#ifndef _EXCHANGE_H_
#define _EXCHANGE_H_

int exchange(int *xp, int y);

#endif


exchange.c

#include "../inc/exchange.h"

int exchange(int *xp, int y)
{
int x = *xp;
*xp = y;
return x;
}


main.c

#include <stdio.h>

int main()
{
int a = 3;
int b = exchange(&a, 4);
printf("a = %d, b = %d\n", a, b);
return 0;
}


Makefile

# 编译变量赋值
CC = gcc
AR = ar rc        # 打包生成静态库
RM = rm -f

#vpath %.h ./inc
#vpath %.c ./src

# 设置路径变量
CUR_DIR = $(shell pwd)
BIN_DIR = $(CUR_DIR)/bin/
SRC_DIR = $(CUR_DIR)/src/
LIB_DIR = $(CUR_DIR)/lib/
INC_DIR = $(CUR_DIR)/inc/
OBJ_DIR = $(CUR_DIR)/obj/

$(BIN_DIR)main.exe : $(OBJ_DIR)main.o $(LIB_DIR)exchange.a
$(CC) $(OBJ_DIR)main.o $(LIB_DIR)exchange.a -o $(BIN_DIR)main.exe

$(OBJ_DIR)main.o : $(SRC_DIR)main.c
$(CC) -c $(SRC_DIR)main.c -o $(OBJ_DIR)main.o

$(LIB_DIR)exchange.a : $(OBJ_DIR)exchange.o
$(AR) $(LIB_DIR)exchange.a $(OBJ_DIR)exchange.o

$(OBJ_DIR)exchange.o : $(SRC_DIR)exchange.c
$(CC) -c $(SRC_DIR)exchange.c -o $(OBJ_DIR)exchange.o

.PHONY : clean
clean:
rm -f ./obj/*.o ./bin/* ./lib/*.a


Makefile文件指定了工程目录中层级文件的依赖关系和目标文件的输出路径。我用path定义文件搜索路径 与 Makefile中路径变量 同时存在时曾出现“make 放弃循环依赖...“的警告,折腾半天时间,最后注销掉vpath命令就好了,不知为什么!

工程目录下载地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: