为多个文件夹下的C源代码编写Makefile文件
上一篇文章写了如何为在同一个文件夹下的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文件的更多相关文章
- java基础 File与递归练习 使用文件过滤器筛选将指定文件夹下的小于200K的小文件获取并打印按层次打印(包括所有子文件夹的文件) 多层文件夹情况统计文件和文件夹的数量 统计已知类型的数量 未知类型的数量
package com.swift.kuozhan; import java.io.File; import java.io.FileFilter; /*使用文件过滤器筛选将指定文件夹下的小于200K ...
- Java实现读取文件夹下(包括子目录)所有文件的文件名
在编程的过程中,经常会用到对文件的读写操作等.比如,找出某一个文件夹下的所有文件名等. 下面的程序给出了,获取某一给定文件夹下所有文件的绝对路径的程序.可以作为某一个模块,在需要的时候直接使用. pa ...
- gitignore 忽略某文件夹下 非某后缀名的文件
忽略指定文件夹下的除某一文件之外的其他文件 parent_dir/!spec_file_name.html 忽略指定文件夹下的除某一类后缀名的文件 parent_dir/*[!*.html] 注意:若 ...
- matlab遍历文件夹下所有图片和遍历所有子文件夹下图片
做图像处理实验,经常需要遍历当前文件下所有图片.matlab当然很早就考虑了这个问题,库函数dir就是完成这个工作的.函数返回的是一个存放所有目录下文件信息的结构体,通过遍历结构体就可以达到访问所有文 ...
- 一个vbs文件将指定文件夹下的文件名输出到指定文件夹下
'on error resume NextConst MY_COMPUTER=&H11& Const WINDOW_HANDLE=0 Const OPTIONS=0 '设置我的电脑为根 ...
- 删除文件夹下各级子目录中的.svn文件
建立一个文本文件,取名为removeSvn.reg(扩展名由txt改为reg),内容如下 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHIN ...
- Linux查找文件夹下包含某字符的所有文件
Linux grep 命令用于查找文件里符合条件的字符串.grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示 ...
- Tomcat的webapps目录下的classes文件夹下缺失编译好的.class文件原因及其解决方法
右键,选择BuildPath: 可以编辑Output folder,指定编译后的文件的存放目录,一般是target/classes目录
- scala 递归读取文件夹下所有的指定后缀的文件
def getFile(file:File): Array[File] ={ val files = file.listFiles().filter(! _.isDirectory) .filter( ...
随机推荐
- Hive查询错误:FAILED: RuntimeException Cannot make directory: hdfs://
解决方法,关闭hadoop安全模式: hadoop dfsadmin -safemode leave
- 转载:DenseNet算法详解
原文连接:http://blog.csdn.net/u014380165/article/details/75142664 参考连接:http://blog.csdn.net/u012938704/a ...
- C++11写算法之选择排序
选择排序,顾名思义,指从数组后面将最小的值找出来,然后与最前面(指当前位置)值进行交换. 时间复杂度:O(n^2) 空间复杂度:O(1) 此处应用了C++11的auto , lambda , stat ...
- laravel Lumen邮箱发送配置
Lumen 中配置邮件 https://blog.csdn.net/glovenone/article/details/54344013 Lareval 比 Lumen 多了一个步骤 https:// ...
- supervisor 与 yii定时任务
https://www.jianshu.com/p/9abffc905645 https://www.cnblogs.com/ajianbeyourself/p/5534737.html https: ...
- OKhttp3
针对上一博文订单调用用户使用默认数据交互方式,下面介绍下使用 Okhttp3网络数据交换方式. 1.订单启动类变化 package com.tycoon.orderService; import or ...
- 转:: 刺鸟:用python来开发webgame服务端(2)
来源:http://ciniao.me/article.php?id=10 --------------- 刺鸟原创文章,转载请注明出处 就在刚才,我们用基于python下的Twisted库写了 ...
- python urllib2/urllib实现
urllib2和urllib是Python中的两个内置模块,要实现HTTP功能,实现方式是以urllib2为主,urllib为辅 urllib2提供一个基础函数urlopen,通过向指定的url发出请 ...
- C#关于AutoResetEvent的使用介绍----修正
说明 之前在博客园看到有位仁兄发表一篇关于AutoResetEvent介绍,看了下他写的代码,看上去没什么问题,但仔细看还是能发现问题.下图是这位仁兄代码截图. 仁兄博客地址:http://www.c ...
- python系列十五:Python3 错误和异常
#!/usr/bin/python #-*-coding:gbk-*- #Python3 错误和异常'''Python 语法错误或者称之为解析错语法分析器指出了出错的一行,并且在最先找到的错误的位置标 ...