上一篇文章写了如何为在同一个文件夹下的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. Linux & windows 应用服务器&Oracle数据库服务器备份

    Linux篇 tomcat启动加入开机启动项   vi /etc/rc.d/rc.local service iptables stop /usr/local/tomcat/bgyappserv01/ ...

  2. 图像sift配准后融合

    image rectification 图像校正 在配准时,先找到特征点,找到特征点后剔除伪匹配点. 然后针对两幅图像做几何矫正(一般通过估计出来的仿射矩阵完成). 这部完成后,图像可以匹配了,但是两 ...

  3. Laravel创建模型

    laravel中创建模型 <?php /** * Created by PhpStorm. * 新建模型 * User: chuang * Date: 17-1-15 * Time: 上午9:1 ...

  4. ipod锁定后的恢复

    1.断开 USB 线缆与设备的连接,但保持线缆的另一端与电脑的 USB 端口相连. 2.关闭设备:按住“睡眠/唤醒”按钮数秒,直到出现红色滑块,然后滑动该滑块.等待设备关闭. 3.按住主屏幕按钮,同时 ...

  5. SQL.Cookbook 读书笔记5 元数据查询

    第五章 元数据查询 查询数据库本身信息 表结构 索引等 5.1 查询test库下的所有表信息 MYSQL SELECT * from information_schema.`TABLES` WHERE ...

  6. Android无线测试之—UiAutomator UiDevice API介绍七

    截图与等待空闲 一.截图和等待空闲相关知识: 1)图片缩放比例:例如图片从100像素缩小到50像素 2)图片质量:是指图片大小,质量越高图片越大,质量越低图片越小 3)File类:指的是一个文件或者一 ...

  7. 初探webpack之环境配置

    先感叹一句,前端的发展真是太快了,ng和bb还没怎么学好就要过时了.现在感觉react当是未来的一个大方向. 以前一直用的grunt,不过前段时间作者已经停止更新了.正好webpack风头正盛,咱也不 ...

  8. JS HTML DOM 事件对象(onclick、onmouseenter)

    HTML DOM 事件允许Javascript在HTML文档元素中注册不同事件处理程序. 事件通常与函数结合使用,函数不会在事件发生前被执行! (如用户点击按钮). HTML DOM 事件 DOM:  ...

  9. 我的Android进阶之旅------>Android 众多的布局属性详解

    Android功能强大,界面华丽,但是众多的布局属性就害苦了开发者,下面这篇文章结合了网上不少资料,希望对读者有用. 第一类:属性值为true或false android:layout_centerH ...

  10. Python正则表达式基础

    1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十 ...