PVFS是一个分布式文件系统,位于ext3之上,向上支持hadoop等应用。整个系统都由C语言实现。回到主题,如果写了一个新的文件,如何编译通过?

首先,得让系统知道添加了这个文件。整个makefile就好像一个公司,src根目录下的makefile是董事长,并不直接管理具体的.c文件。那么谁具体负责.c文件呢?各个子目录下的module.mk文件负责。我们来看看src/apps/admin/module.mk有什么内容:

DIR := src/apps/adminADMINSRC := \$(DIR)/pvfs2-check-config.c \$(DIR)/pvfs2-set-debugmask.c \$(DIR)/pvfs2-set-mode.c \$(DIR)/pvfs2-set-eventmask.c \$(DIR)/pvfs2-set-sync.c \$(DIR)/pvfs2-ls.c \$(DIR)/pvfs2-ping.c \$(DIR)/pvfs2-rm.c \$(DIR)/pvfs2-stat.c \$(DIR)/pvfs2-statfs.c \$(DIR)/pvfs2-perf-mon-example.c \$(DIR)/pvfs2-mkdir.c \$(DIR)/pvfs2-chmod.c \$(DIR)/pvfs2-chown.c \$(DIR)/pvfs2-fs-dump.c\$(DIR)/pvfs2-fsck.c\$(DIR)/pvfs2-validate.c\$(DIR)/pvfs2-cp.c \$(DIR)/pvfs2-viewdist.c \$(DIR)/pvfs2-xattr.c \$(DIR)/pvfs2-touch.c \$(DIR)/pvfs2-remove-object.c \$(DIR)/pvfs2-ln.c \$(DIR)/pvfs2-perror.c \$(DIR)/pvfs2-check-server.c \$(DIR)/pvfs2-drop-caches.cADMINSRC_SERVER := \$(DIR)/pvfs2-mkspace.c \$(DIR)/pvfs2-migrate-collection.c \$(DIR)/pvfs2-change-fsid.c \$(DIR)/pvfs2-showcoll.c

从这可以看出,当前目录下所有的源文件都在module.mk中登记,src目录下的Makefile通过include关键字将这些makefile文件包含进来,直接从module.mk拉取相关信息。Makefile中关键代码如下:

include module.mk
include $(patsubst %, %/module.mk, $(MODULES))

其中,patsubst是字符串替换函数,宏MODULES表示所有包含文件module.mk的路径

举个例子,现在我实现了一个拷贝目录的功能,源文件名为pvfs2-dir-cp.c,存放于路径:src/apps/admin/。

打开src/apps/admin/下的module.mk,在$(DIR)/pvfs2_cp.c下方添加一行$(DIR)/pvfs2_dir_cp.c,如下:

$(DIR)/pvfs2-cp.c \
$(DIR)/pvfs2-dir-cp.c \

回到src目录,执行 make && make install 即可

向PVFS工程中添加新文件相关推荐

  1. ios之Xcode工程中添加文件常用快捷键

    1.Xcode某个工程中添加文件 有两种方式: 方式一:"command"+"n",弹出添加文件对话框. 方式二:在需要添加文件的工程目录下右键,选择" ...

  2. 【解决问题】Qt项目不能添加新文件Files are not automatically added to the CmakeLists.text file of the CMake project.

    Qt项目不能添加新文件Files are not automatically added to the CmakeLists.text file of the CMake project. 在Qt项目 ...

  3. pandas向已经拥有数据的Excel文件中添加新数据

    不知道大家有没有过相同的经历,就是我们向Excel表格中添加新数据的时候,经常会导致原先拥有的数据被覆盖掉了,那么如何解决这个问题呢,这里给出一种可行的方法.阅读此篇的基础是先理解pandas Dat ...

  4. java工程加包_Java工程中添加依赖jar包不起作用问题总结

    Java工程中添加依赖jar包不起作用问题总结 此次总结两种方式的依赖问题 1 在Eclipse中添加依赖jar包不起作用问题 这种方式可能是Eclipse缓存,或者Eclipse还没有反应过来.例如 ...

  5. Android 驱动(17)---如何在linux中添加新的kernel module

    如何在linux中添加新的kernel module 该SOP针对客户如何添加一个kernel module,并把生成的.ko打包进system.img的过程. 解决方案 L版本(version> ...

  6. Android内核开发:在源码树中添加新的app应用

    本文是<Android内核开发>系列的第十二篇文章,上一篇文章介绍了如何从源码中删除出厂的app应用,本文则在此基础上,详细介绍一下如何在Android内核源码树中添加一个新的app应用. ...

  7. Qt中添加资源文件及资源文件的使用

    1.将包含各种icon的名为 resource文件夹放在.pro所在的文件夹中 2.右键工程文件夹,添加新文件->Qt--->Qt资源文件->起名为resource,保存在.pro所 ...

  8. (解决 fatal error C1083: 无法打开包括文件:“xxxxxxxxx.h”: No such file or directory)VS和Eclipse添加新文件/文件夹路径步骤

    Visual Studio和Eclipse添加新文件/文件夹路径步骤 向VS工程中添加文件夹 把新增的头文件添加到路径中 Eclipse添加头文件 向VS工程中添加文件夹 首先添加相关的文件夹和文件– ...

  9. 在VirtualBox中的Ubuntu中添加新硬盘

    2019独角兽企业重金招聘Python工程师标准>>> 在VirtualBox中的Ubuntu中添加新硬盘 VitrualBox是不允许更改重置硬盘大小的,所以当硬盘不足时,只能添加 ...

最新文章

  1. Qt简介、安装及在Ubuntu14.04 32位上简单使用举例
  2. 如何将Swift数组转换为字符串?
  3. ORACLE数据库查看执行计划
  4. Leetcode 100. 相同的树 (每日一题 20210811)
  5. CatBoost讲解
  6. php代码在线base64解码,Base64在线编码解码实现代码 演示与下载
  7. oracle 执行java_oracle调用JAVA类的方法
  8. 当HTTP状态代码不足时:处理Web API错误报告
  9. windows 远程执行 cmd 命令的 9 种方法
  10. 关于数组增减Array 和list的区别
  11. Sql Server 性能优化之包含列
  12. DXGI中的flip显示模型
  13. hd计算机技术,BD和HD的区别是什么?
  14. 使用高德地图实现根据地名查询经纬度
  15. dw html5中怎么设置图片自动切换,DW制作九宫格全屏亮灯轮播图片且自动切换图片教程...
  16. Azure云平台之游戏
  17. MySQL数据库的卸载与安装
  18. linux服务器安装字体库
  19. 陷入可怕的人间“地狱”
  20. 矩阵实验:图形图像处理

热门文章

  1. 网页中嵌入Flash的方法讨论
  2. MathJax基础教程笔记
  3. 欧卡2在线服务器返回数据错误,omsi2开启时报错是怎么回事
  4. java_TCP/UDP整合
  5. MM32F103芯片J-Link调试无法读不到芯片 ID 号
  6. 【解决方案】森林火灾频发,如何通过国标GB28181智能监控分析系统构建一个安全的森林环境?
  7. 【知识图谱】什么是知识图谱?知识图谱的应用。知识图谱的数据模型(三元组 模型、属性图模型)。西游记中的知识图谱。
  8. eyeos 云计算操作系统
  9. [收藏]白话初级会计基础知识,从头讲到尾
  10. 【python debug】could not convert string to float: ‘File‘ got an unexpected keyword argument