首页 > 其他分享 >单个makefile构建多目录的工程

单个makefile构建多目录的工程

时间:2023-01-04 14:12:15浏览次数:33  
标签:app makefile pro2 构建 单个 test home zw pro

单makefile 构建多个目录的工程适用于构建稍微复杂一些的工程
目录树如下


➜  test_pro2 tree -h   
.
├── [4.0K]  app_1
│   ├── [ 272]  app1.c
│   └── [ 225]  app1.h
├── [4.0K]  app_2
│   ├── [ 270]  app2.c
│   └── [ 226]  app2.h
├── [ 334]  app_main.c
└── [1.0K]  makefile

2 directories, 6 files

makefile 文件

ROOT_DIR = $(shell pwd)
APP_1_DIR = $(ROOT_DIR)/app_1
APP_2_DIR = $(ROOT_DIR)/app_2


SRC_DIR := $(ROOT_DIR) \
			$(APP_1_DIR) \
			$(APP_2_DIR)

INC_DIR := $(APP_1_DIR) \
		$(APP_2_DIR)


SRC = $(foreach dir, $(SRC_DIR), $(wildcard $(dir)/*.c))                   # 获取当前目录下的所有.c文件
OBJ := $(patsubst %.c, %.o, $(SRC))     # 将所有的.c文件换成.o文件
# OBJ = $(SRC:.cc=.o)


EXEC = test_app.bin


DFLAGS ?=                               # 库的链接参数
CFLAGS := $(patsubst %, -I %, $(INC_DIR))   # 参数信息
CROSS_COMPILE ?=                        # 没有定义交叉编译器时,直接用gcc


CC := $(CROSS_COMPILE)gcc               # 编译器 按需就行
AR = ${CROSS_COMPILE}ar
STRIP = ${CROSS_COMPILE}strip
AS = ${CROSS_COMPILE}as
LD = ${CROSS_COMPILE}lr
RANLIB = ${CROSS_COMPILE}ranlib
NM = ${CROSS_COMPILE}nm


.PHONY : clean all
all: $(EXEC)

$(info will make project)

$(EXEC): $(OBJ)
	$(CC) $(OBJ) -o $@ $(CFLAGS) $(DFLAGS)

%.o: %.c
	$(CC) -c $< -o $@ $(CFLAGS) $(DFLAGS)

clean:
	rm -rf $(OBJ) $(EXEC)

测试

➜  test_pro2 make clean all
will make project
rm -rf  /home/zw/test_pro/test_pro2/app_main.o  /home/zw/test_pro/test_pro2/app_1/app1.o  /home/zw/test_pro/test_pro2/app_2/app2.o      test_app.bin
gcc                -c /home/zw/test_pro/test_pro2/app_main.c -o /home/zw/test_pro/test_pro2/app_main.o  -I /home/zw/test_pro/test_pro2/app_1  -I /home/zw/test_pro/test_pro2/app_2    
gcc                -c /home/zw/test_pro/test_pro2/app_1/app1.c -o /home/zw/test_pro/test_pro2/app_1/app1.o  -I /home/zw/test_pro/test_pro2/app_1  -I /home/zw/test_pro/test_pro2/app_2    
gcc                -c /home/zw/test_pro/test_pro2/app_2/app2.c -o /home/zw/test_pro/test_pro2/app_2/app2.o  -I /home/zw/test_pro/test_pro2/app_1  -I /home/zw/test_pro/test_pro2/app_2    
gcc                 /home/zw/test_pro/test_pro2/app_main.o  /home/zw/test_pro/test_pro2/app_1/app1.o  /home/zw/test_pro/test_pro2/app_2/app2.o      -o test_app.bin  -I /home/zw/test_pro/test_pro2/app_1  -I /home/zw/test_pro/test_pro2/app_2    
➜  test_pro2 ./test_app.bin 
main in 
app1_init in 
app2_init in 
➜  test_pro2 

标签:app,makefile,pro2,构建,单个,test,home,zw,pro
From: https://www.cnblogs.com/tccxy/p/17024665.html

相关文章

  • 单个makefile构建单目录的工程
    使用单个makefile构建单目录的工程适用于一些简单的测试场景目录树如下➜test_protree-h.└──[4.0K]test_pro1├──[800]Makefile├──[......
  • makefile的常用函数及特殊字符
    makfile的常用函数下面的常用函数掌握以下,也不用记得住,用时候过来取就行,基本就没问题了$(wildcard*.c)#同一类型的文件*.h*.cpp等$(wildcard$(SRC)/*.c)#同一类型......
  • 低代码如何构建响应式布局前端页面
    “你开发的界面为啥在我的屏幕里这么小啊?”“这个界面为啥在我这里会出现横向滚动条啊?”大家在进行前端界面开发时,有没有遇到这些类似的问题呢?又是如何解决的呢?页面响应......
  • 基于 EventBridge API Destination 构建 SaaS 集成实践方案
    作者:赵海引言事件总线EventBridge是阿里云提供的一款无服务器事件总线服务,支持阿里云服务、自定义应用、SaaS应用以标准化、中心化的方式接入,并能够以标准化的CloudE......
  • JetPack — 边缘计算设备构建AI应用全面解决方案
    ​​JetPackSDK|NVIDIADeveloper​​NVIDIAJetPackSDK是构建AI应用的全方面解决方案。包含适用于Linux操作系统的最新Linux驱动包(L4T)以及用于深度学习、计算......
  • 将 RAC 克隆到单个实例后,如何删除对其他线程的任何引用
    背景 RAC数据库的节点克隆过程创建了一个克隆的单实例RAC数据库,因此新的克隆数据库包含一个额外的线程/实例,就像在原始RAC环境中一样。下面详细记录一下RAC变单机的......
  • jenkins快速入门,自动构建一个hello world项目(devops,ci/cd)
    ​​jenkins​​​是一个非常老牌的​​ci/cd​​​工具,它是一款使用​​Java​​​写的开源自动化应用。可以通过界面或​​Jenkinsfile​​​告诉它执行什么任务,何时执行,......
  • 从源代码构建TensorFlow流程记录
    京东科技隐私计算产品部曹雨晨为什么从源代码构建通常情况下,直接安装构建好的.whl即可。不过,当需要一些特殊配置(或者闲来无事想体会TensorFlow构建过程到底有多麻烦)的时......
  • 从源代码构建TensorFlow流程记录
    京东科技隐私计算产品部曹雨晨为什么从源代码构建通常情况下,直接安装构建好的.whl即可。不过,当需要一些特殊配置(或者闲来无事想体会TensorFlow构建过程到底有多麻烦)的......
  • 构建Android应用程序
    Android应用程序(俗称为应用程序)使用Gradle作为构建工具,通常通过唯一受支持的IDE,AndroidStudio。许多资源可用于学习如何构建Android应用程序。然而,本指南着重于创建新的A......