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

来源:互联网 发布:怎样才能恢复手机数据 编辑:程序博客网 时间:2024/05/01 11:34

以前在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 = gccAR = 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 : cleanclean:    rm -f ./obj/*.o ./bin/* ./lib/*.a

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


工程目录下载地址


原创粉丝点击