上一篇文章写了如何为在同一个文件夹下的C源代码,本篇文章为多个文件夹下的C源代码编写Makefile文件。

  建立两个文件夹,分别为abs与src。其最终目录结构如下:

1 $ ls *
2 jun.c Makefile
3
4 abs:
5 jun.h Makefile qi.c qi.h shao.c
6
7 src:
8 Makefile qianrushi.c qianrushi.h

  首先看main函数,只能有一个main函数:

#include<stdio.h>
#include"jun.h"
#include"qi.h"
#include"../src/qianrushi.h"
int main(){
printf("shao");
jun();
qi();
qianrushi();
return 0;
}

  qi.c与qi.h:

1 //qi.c
2 #include<stdio.h>
3 void qi(){
4 printf("qi");
5 }
6
7 //qi.h
8 void qi();

  jun.c与jun.h:

1 //jun.c
2 #include<stdio.h>
3 void jun(){
4 printf("jun");
5 }
6
7 //jun.h
8 void jun();

  src下的qianrushi.c与qianrushi.h:

1 //qianrushi.c
2 #include<stdio.h>
3 void qianrushi(){
4 printf("qianrushi");
5 }
6
7 //qianrushi.h
8 void qianrushi();

  为每个文件夹建立一个Makefile文件,使得主Makefile不会太冗杂:

    abs文件夹下的Makefie:

 1 obj=shao.o  qi.o
2 CC=@gcc -c
3
4 .PHONY:all
5 all:$(obj) #要生成多个目标文件,使用伪目标作为终极目标,可以一次生成多个目标文件
6
7 shao.o:shao.c
8 $(CC) shao.c
9 cp shao.o ../
10
11 qi.o:qi.h qi.c
12 $(CC) qi.c
13 cp qi.o ../
14
15 clean:
16 rm *.o

    src文件夹下的Makefile:    

1 .PHONY:all
2 all:qianrushi.o
3
4 qianrushi.o:qianrushi.h qianrushi.c
5 gcc -c qianrushi.c
6 cp qianrushi.o ../
7
8 clean:
9 rm *.o

   主Makefile(与src和abs在同一目录下的Makefile):

 1 obj=shao.o jun.o qi.o qianrushi.o
2 cc=@gcc
3 #command=@cd ./
4
5 sum:$(obj)
6 # cd ./abs && $(MAKE)
7 # cd ./src && $(MAKE)
8 $(cc) $(obj) -o sum
9
10 shao.o:
11 @cd ./abs && $(MAKE)
12
13 jun.o:abs/jun.h jun.c
14 $(cc) -c jun.c
15
16 qi.o:
17 @cd ./abs && $(MAKE)
18
19 qianrushi.o:
20 @cd ./src && $(MAKE)
21
22 clean:
23 @rm ./*.o;
24 @rm ./src/*.o;
25 @rm ./abs/*.o;

  执行make命令就能生成可执行文件sum:

 1 $ ls
2 abs jun.c Makefile src
3 $ make
4 make[1]: Entering directory '......../abs'
5 cp shao.o ../
6 cp qi.o ../
7 make[1]: Leaving directory '......../abs'
8 make[1]: Entering directory '......../src'
9 gcc -c qianrushi.c
10 cp qianrushi.o ../
11 make[1]: Leaving directory '......../src'
12 $ ls -l
13 总用量 44
14 drwxr-xr-x 2 qi qi 4096 5月 17 20:25 abs
15 -rw-r--r-- 1 qi qi 48 5月 17 18:37 jun.c
16 -rw-r--r-- 1 qi qi 1536 5月 17 20:25 jun.o
17 -rw-r--r-- 1 qi qi 329 5月 17 18:42 Makefile
18 -rw-r--r-- 1 qi qi 1552 5月 17 20:25 qianrushi.o
19 -rw-r--r-- 1 qi qi 1536 5月 17 20:25 qi.o
20 -rw-r--r-- 1 qi qi 1736 5月 17 20:25 shao.o
21 drwxr-xr-x 2 qi qi 4096 5月 17 20:25 src
22 -rwxr-xr-x 1 qi qi 8600 5月 17 20:25 sum
23 $ make clean
24 $ ls -l
25 总用量 28
26 drwxr-xr-x 2 qi qi 4096 5月 17 20:26 abs
27 -rw-r--r-- 1 qi qi 48 5月 17 18:37 jun.c
28 -rw-r--r-- 1 qi qi 329 5月 17 18:42 Makefile
29 drwxr-xr-x 2 qi qi 4096 5月 17 20:26 src
30 -rwxr-xr-x 1 qi qi 8600 5月 17 20:25 sum

为多个文件夹下的C源代码编写Makefile文件的更多相关文章

  1. java基础 File与递归练习 使用文件过滤器筛选将指定文件夹下的小于200K的小文件获取并打印按层次打印(包括所有子文件夹的文件) 多层文件夹情况统计文件和文件夹的数量 统计已知类型的数量 未知类型的数量

    package com.swift.kuozhan; import java.io.File; import java.io.FileFilter; /*使用文件过滤器筛选将指定文件夹下的小于200K ...

  2. Java实现读取文件夹下(包括子目录)所有文件的文件名

    在编程的过程中,经常会用到对文件的读写操作等.比如,找出某一个文件夹下的所有文件名等. 下面的程序给出了,获取某一给定文件夹下所有文件的绝对路径的程序.可以作为某一个模块,在需要的时候直接使用. pa ...

  3. gitignore 忽略某文件夹下 非某后缀名的文件

    忽略指定文件夹下的除某一文件之外的其他文件 parent_dir/!spec_file_name.html 忽略指定文件夹下的除某一类后缀名的文件 parent_dir/*[!*.html] 注意:若 ...

  4. matlab遍历文件夹下所有图片和遍历所有子文件夹下图片

    做图像处理实验,经常需要遍历当前文件下所有图片.matlab当然很早就考虑了这个问题,库函数dir就是完成这个工作的.函数返回的是一个存放所有目录下文件信息的结构体,通过遍历结构体就可以达到访问所有文 ...

  5. 一个vbs文件将指定文件夹下的文件名输出到指定文件夹下

    'on error resume NextConst MY_COMPUTER=&H11& Const WINDOW_HANDLE=0 Const OPTIONS=0 '设置我的电脑为根 ...

  6. 删除文件夹下各级子目录中的.svn文件

    建立一个文本文件,取名为removeSvn.reg(扩展名由txt改为reg),内容如下 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHIN ...

  7. Linux查找文件夹下包含某字符的所有文件

    Linux grep 命令用于查找文件里符合条件的字符串.grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示 ...

  8. Tomcat的webapps目录下的classes文件夹下缺失编译好的.class文件原因及其解决方法

    右键,选择BuildPath: 可以编辑Output folder,指定编译后的文件的存放目录,一般是target/classes目录

  9. scala 递归读取文件夹下所有的指定后缀的文件

    def getFile(file:File): Array[File] ={ val files = file.listFiles().filter(! _.isDirectory) .filter( ...

随机推荐

  1. HDU1087 Super Jumping! Jumping! Jumping! 最大连续递增子段

    Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  2. shell编程实战总结

    最近复习一下shell,顺便高级进阶一下,之前写脚本能简单尽量简单来,发现好多高深的东西还是没有理解,因此在这里记录一下整个过程并做相应的总结. 通过上代码的方式来介绍,后续可能会调整相应的排版 1. ...

  3. windown安装bloomFilter

    个人博客:https://blog.sharedata.info/ 最近在研究python爬虫,需要在windown中安装bloomFilter来处理网页的去重问题,在window中安装python然 ...

  4. Linux重启与关机命令

    重启命令 reboot shutdown -r now 立即重启 shutdown -r 10   十分钟后重启 shutdown -r 17:00 在17:00重启 关机命令 halt 立即关机 p ...

  5. cocos2d-x:七彩连珠

    大学前,我一直以为学计算机就是学做游戏,或者玩游戏...(我果断的用大学的差不多五分之二实践了后面半块.) 大学后,人们一直以为学计算机的就是 修电脑.装机.盗qq号.word.excel....最近 ...

  6. 【BZOJ4325】NOIP2015 斗地主 搜索+剪枝

    [BZOJ4325]NOIP2015 斗地主 Description 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗 ...

  7. K-th Number(主席树)

    K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 59327   Accepted: 20660 Ca ...

  8. echarts+thinkphp 学习写的第一个程序

    一.前台 建个名为map.html,代码如下. <!doctype html><html lang="en"><head> <meta c ...

  9. 巨蟒python全栈开发django11:ajax&&form表单上传文件contentType

    回顾: 什么是异步? 可以开出一个线程,我发出请求,不用等待返回,可以做其他事情. 什么是同步? 同步就是,我发送出了一个请求,需要等待返回给我信息,我才可以操作其他事情. 局部刷新是什么? 通过jq ...

  10. an open source web server and reverse proxy

    https://www.nginx.com/resources/admin-guide/ NGINX is an open source web server and reverse proxy th ...