首页 > 其他分享 >makefile学习记录 :一个工程里有多个makefile 如何make根目录下的makefile 调用子目录下的makefile,编译所有.c文件

makefile学习记录 :一个工程里有多个makefile 如何make根目录下的makefile 调用子目录下的makefile,编译所有.c文件

时间:2023-10-21 10:12:45浏览次数:46  
标签:子目录 makefile make libfile 编译 myfile so 根目录

注:本文个人学习记录

目的:一个工程里有多个makefile 如何make根目录下的makefile 调用子目录下的makefile,编译所有.c文件

如图所示 目录结构 ,根目录server: makefile ;子目录 so :makefile

 

 

根目录makefile:

GCC=gcc

APP=server

 

ALL_C=$(wildcard ./*.c)

C_OBJ=$(notdir $(ALL_C))

O_OBJ=$(patsubst %.c,%.o,$(C_OBJ))

LIBS=-lpthread 

 

.PHONE:all  # 将all 设置成伪目标,all会第一个执行 ,但不会生产目标,依赖的目标会依次执行

all:libfile.a $(APP)   #依赖的目标 libfile.a  、 server

libfile.a:

$(MAKE) -C ./so/ #跳出当前工作目录进入到子目录中,编译.c文件,编译完后回到当前目录  $(MAKE) -C (路径)   

$(APP):$(C_OBJ)        #编译当前目录下的.c 生成目标程序

$(GCC) $^ -lfile -L./so/ -o $@ $(LIBS)

 

.PHONY:clean

clean:

rm -r $(APP) ./so/*.o ./so/*.a   #清理子目录下的编译后产生的文件 ,当前目录下的目标文件

so 目录 :编译静态库

libfile.a:myfile.o

ar crv libfile.a myfile.o

myfile.o:myfile.c

gcc -c myfile.c

.PHONY:clean

clean:

rm libfile.a myfile.o

编译验证:

 

 编译:

 

编译结果:

 

 

 

参考:多文件目录下makefile文件递归执行编译所有c文件 - Shirlies - 博客园

         嵌套执行MAKE $(MAKE) -C subdir_rongwenbin的博客-CSDN博客

 

https://blog.csdn.net/qq_35612415/article/details/123511196

 

标签:子目录,makefile,make,libfile,编译,myfile,so,根目录
From: https://www.cnblogs.com/im18620660608/p/17778519.html

相关文章

  • make clean命令清理在不同目录中编译的对象
    gnu-makemakefile UsingMakefiletocleansubdirectories是否可以从父目录执行makeclean,而该父目录又递归清除所有子目录,而不必在每个子目录中都包含makefile?例如,当前在我的Makefile中,我有类似以下内容:123456789SUBDIRS=src,src1.PHONY:cleansubdirs$(S......
  • Makefile详解—clean
    每个Makefile中都应该写一个清空目标文件(.o和执行文件)的规则,这不仅便于重编译,也很利于保持文件的清洁。这是一个“修养”。一般的风格都是: clean:rmedit$(objects) 更为稳健的做法是: .PHONY:cleanclean:-rmedit$(objects) 前面说过,.PHONY意思表示clean是一......
  • Makefile knowledge summarization
    WildcardThewildcardinmakefileissimilarwithmacroinC/C++,itisn'tsimilarwithwildcardinlinuxshell,soitdoesn'texpendautomatically.object1=*.c//*.cobject2=$(wildcard*.cpp)//main.cppt1.cppt2.cppAutomaticallygene......
  • Linux编译安装cmake
    #cmake官网https://cmake.org/#cmake各个版本源码仓库https://cmake.org/files/#下载wgethttps://cmake.org/files/v3.21/cmake-3.21.1.tar.gz#解压tarxvfcmake-3.21.1.tar.gz&&cdcmake-3.21.1/#引导安装程序帮助./bootstrap--help#创建安装目录mkdirbui......
  • QT cmake工程使用QXlsx源码操作execl,无需编译QXlsx,也不需要下载其他东西,windows和ubu
    一、下载地址:链接二、进入下载好的QXlsx目录下,取出QXlsx目录和README.md待用三、用qt创建一个简单的cmake工程,将QXlsx目录和README.md文件放到cmakelists.txt所在目录 四、修改cmakelists.txt文件cmake_minimum_required(VERSION3.5)project(xlsxTestLANGUAGESCXX)......
  • makefile中.PHNOY的用法
    makefile中PHONY的重要性     伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行所在规则定义的命令,有时也可以将一个伪目标称为标签。伪目标通过  PHONY来指明。   PHONY定义伪目标的命令一定会被执行,下面尝试分析这种优点的......
  • 【Linux驱动】内核模块编译 —— make modules 的使用(单模块编译、多模块编译)
    编译驱动一般采用的是将驱动编译成模块(.ko文件),然后加载到内核,这其中就用到了makemodules命令。目录一、单模块编译1、一个c文件编译成一个ko文件2、多个文件编译成一个ko文件二、多模块编译(多文件多模块)一、单模块编译1、一个c文件编译成一个ko文件下面是最简......
  • latexmk+make+条件编译一键编译论文生成 明评版/盲评版 单面版/双面版
    用latexmk+make编译latex项目假设latex项目的目录结构如下:.├──build│  ├──aux│  ├──各种临时文件│  └──release│  ├──thesis.pdf│  └──thesis.synctex.gz├──data│  ├──abstract.tex│  ├─......
  • Makefile深入
    题目要求建立项目目录myutilxxxx(xxxx为学号后四位),子目录有:srcincludelibbin等源代码放入src,头文件放入include,生成的静态库,共享库放入lib,生成的中间文件,可执行文件放入bin编辑makefile放入mymath目录写出编译代码的makefile,编译出来的目标文件为testmyuti......
  • make error
    1. make报错“***missingseparator"在我们执行make时,有时候make会报以下错误:makefile:4:***missingseparator.Stop这种情况一般是Makefile中制表符Tab的问题,删除有问题的行中的制表符Tab重新输入即可。Makefile中每个规则的所有操作都通过Tab识别,并且不会将4个空格识别......