一点一点学写Makefile(6)-遍历当前目录源文件及其子目录下源文件
时候,我们在开发的时候需要将本次工程的代码分成多个子目录来编写,但是在Makefile的编写上却是个问题,下面我就教大家怎么构建带有子文件夹的源代码目录的自动扫描编译
下面这张图是我的文件树
这里面src目录下是我的源代码,我将功能代码分成了三个子模块,分别为test1, test2, test3, 调用这三个子模块的是main.cpp文件,下面我将这三个子模块的代码
- // src/test1/test1.h
- #ifndef __TEST1_H__
- #define __TEST1_H__
- int test1();
- #endif //__TEST1_H__
- // src/test1/test1.cpp
- #include "test1.h"
- int test1() {
- return 1;
- }
- <pre name="code" class="cpp">// src/test2/test2.h
- #ifndef __TEST2_H__
- #define __TEST2_H__
- int test2();
- #endif //__TEST2_H__
- // src/test2/test2.cpp
- #include "test2.h"
- int test2() {
- return 2;
- }
- // src/test3/test3.h
- #ifndef __TEST3_H__
- #define __TEST3_H__
- int test3();
- #endif //__TEST3_H__
- // src/test3/test3.cpp
- #include "test3.h"
- int test3() {
- return 3;
- }
// src/main.cpp
#include <iostream>
#include "test1/test1.h"
#include "test2/test2.h"
#include "test3/test3.h"
using namespace std;
int main() {
cout << "test1()" << test1() << endl;
cout << "test2()" << test2() << endl;
cout << "test3()" << test3() << endl;
}
Makefile遍历的核心代码如下:
- SRC_PATH = ./src
- DIRS = $(shell find $(SRC_PATH) -maxdepth 3 -type d)
- # 为了更大幅度的支持项目的搭建,将三种文件格式的后缀都单独便利到变量中
- SRCS_CPP += $(foreach dir, $(DIRS), $(wildcard $(dir)/*.cpp))
- SRCS_CC += $(foreach dir, $(DIRS), $(wildcard $(dir)/*.cc))
- SRCS_C += $(foreach dir, $(DIRS), $(wildcard $(dir)/*.c))
- OBJS_CPP = $(patsubst %.cpp, %.o, $(SRCS_CPP))
- OBJS_CC = $(patsubst %.cc, %.o, $(SRCS_CC))
- OBJS_C = $(patsubst %.c, %.o, $(SRCS_C))
下面是Makefile的全部文件
一点一点学写Makefile(6)-遍历当前目录源文件及其子目录下源文件的更多相关文章
- 一点一点学写Makefile(3)-增加第三方库和头文件
我们在写代码的时候不一定都是有自己来完成,一个工程中会大量使用一些比较优秀的动态库.静态库等,我们在使用这些库完成所有的代码后,需要在编译的时候将这些库使用的头文件添加到我们的工程上,将他的库文件也添 ...
- 一点一点学写Makefile(2)-自动搜所当前目录下的所有源文件
上个博客我们使用的是笨方法添加源文件,本次我要实现的是遍历文件夹来获得所有的cpp文件 //makefile CROSS = CC = $(CROSS)gcc CXX = $(CROSS)g++ DE ...
- 一点一点学写Makefile(4) - 编译时指定宏参数
我们在项目中有时为了方便会自定义一些与项目无关的功能,例如打印输出一些提示信息.将关键协议生成文件等,但是如果每次都通过修改代码的方法来实现,测试部门就会认为你改的这些代码可能会带来其他问题.对于这种 ...
- 一点一点学写Makefile(5)-获取文件所在路径
我们在开发一套代码时,应该保证工程放到任何一个目录中均可以编译成功,但是有时候链接库的时候会造成编译错误,本次就会告诉大家如何动态的获得工程所在的绝对路径 代码下载目录 选择Makefile-5 // ...
- C# 遍历文件夹及子目录下所有图片.
要求:取指定目录下面的所有图片,以表格的型式展示并显示该图片的相对路径. 服务端代码: public partial class ViewIcon : System.Web.UI.Page { JAr ...
- 查找当前目录和所有子目录下的后缀名为.o的文件,删除之
查找: find . -name "*.o" -exec ls {} \; 删除: find . -name "*.o" -exec rm -f {} \;
- python 列出出当前目录及所有子目录下的文件
[root@web1 test]# cat walk.py #!/usr/bin/python # -*- coding: UTF-8 -*- import os for root, dirs, fi ...
- 一点一点学写Makefile-1
相信很多Linux开发者 都得自己来写Makefile,刚开始学习学写这个的时候都会碰到很多困难,我之前没有自己独立完成过Makefile,都是在公司已有的模板上添加.现在突然有一个很大的想法就是从零 ...
- 一点一点学ASP.NET系列
转自:http://www.cnblogs.com/stwyhm/archive/2006/08/10/473075.html 做开发近两年了,自认为自己还算是个知道要上进的人,每天不停地学习,不停地 ...
随机推荐
- js面向切面编程
Function.prototype.before=function(func){ var _self=this; return function(){ if(func.apply(this,arg ...
- python附录-builtins.py模块str类源码(含str官方文档链接)
python附录-builtins.py模块str类源码 str官方文档链接:https://docs.python.org/3/library/stdtypes.html#text-sequence ...
- 让android系统中任意一个view变成进度条
1.效果 2.进度条背景drawable文件 结束后可以恢复原背景. <?xml version="1.0" encoding="utf-8"?> ...
- fixed
之前我们见的fixed就是固定在低端.后来我遇到一个问题 如果 这样写: div{ position: fixed; left: 0; bottom: 0; } 内容吧div撑开,有多少算多少 di ...
- Angular4+NodeJs+MySQL 入门-03 后台接口定义
这篇里是如何定义接口,我们一般访问接口如:post请求调用http://127.0.0.1:11000/webapi/userinfo/user 这个接口,成功返回用户信息,如果失败要返回失败原因等. ...
- zookeeper JAVA API 简单操作
package org.admln.program.Zoo_Test; import java.io.IOException; import java.security.NoSuchAlgorithm ...
- 动态替换animator的研究
http://blog.csdn.net/tonnychu/article/details/49903657 http://blog.csdn.net/tlrainty/article/details ...
- win7远程登录
开始--附件--远程桌面连接 点击显示选项 填写信息,连接上了. 分配磁盘 计算机---右键----管理
- [转] .net core Session , Working with a distributed cache
本文转自:https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed By Steve Smith+ Di ...
- 详解ASP.NET MVC Model验证
ASP.NET mvc的最好的优点之一就是支持Model验证,这个特性很方便你可以选择在定义Model的时候在字段中采用特性进行注解约定,也可以在代码中自己进行手动验证.下面就来细说一下ASP.NET ...