DDK Build编译的时候,使用3个文件来描述被编译的源码,其中SOURCES和Makefile是必须的,而DIRS则只在划分目录的时候有用。Makefile在这里作用并不大但是必须和SOURCES文件成对出现,关键还是SOURCES和DIRS文件。

SOURCES文件用于描述其所在目录下,有哪些文件参与编译,编译的结果应该是什么(是一个lib还是一个sys?),输出目录在哪里,要传递给编译器的各种定义和选项分别是什么,等等。这里有一个概念需要特别的注意,就是由一个SOURCES文件描述的其实就是一个单独的小工程,Build最后会参照SOURCES文件的设置,产生一个指定的目标文件(dll ? lib ? exe ? sys ? 都有可能,完全依赖于SOURCES文件的写法)。

DIRS文件用于描述,在当前目录下,需要被编译的子目录有哪些。注意!DIRS文件和SOURCES文件不能共存在同一个目录下。

举例:工程DDKTest,由3个子模块和一个主模块构成,目录结构如下:

DDKTest
├─Mod_A
├─Mod_B
├─Mod_C
└─Mod_Main
└─dirs      //这里必须有一个dirs文件,告诉DDK的build工具, 当前目录下有哪些文件夹参与编译


dirs的内容是这样:
DIRS = Mod_A Mod_B Mod_C Mod_Main
4个文件夹名字之间以空格间隔,也可以使用 \ 连行符分隔成多行去书写。

在 Mod_A ,Mod_B,Mod_C,Mod_Main 这4个文件夹下,分别含有一个SOURCES文件,每一个用于
告诉Build,自身目录内有哪些文件参与编译,在编译时传递给编译和链接器的参数又是什么,最后要生
成的目标文件是什么类型,等等。

在这个例子中,Mod_A、Mod_B、Mod_C 都是子模块,因此我让他们都生成为lib文件,也就是静态库
文件。而对于Mod_Main ,由于是主模块,因此我们用它生成.sys文件,但是在Mod_Main的
SOURCES文件中,我们必须告诉Build,其他3个子模块生成的lib文件在哪里,并且要求链接器在链接时找到这3个子模块生成的lib,这样才能完整的编译完整个DDKTest项目。

我当时在最后一步这里没搞明白,看看都编译通过生成了6个lib,最后一个主模块一编译挺ok ,一链接一大堆的各种找不到,很是郁闷的。

总结下,其实就是将每个模块都单独的编译成一个lib,最后由主模块在生成目标文件时,和所有已编译好的lib进行链接即可。

DDK Build的DIRS和SOURCE文件的更多相关文章

  1. java笔试题: ——将e:/source文件夹下的文件打个zip包后拷贝到f:/文件夹下面

    将e:/source文件夹下的文件打个zip包后拷贝到f:/文件夹下面 import java.io.*; import java.util.zip.ZipEntry; import java.uti ...

  2. 豹哥嵌入式讲堂:ARM开发中有用的文件(1)- source文件

    大家好,我是豹哥,猎豹的豹,犀利哥的哥.今天豹哥给大家讲的是嵌入式开发里的source文件种类. 众所周知,嵌入式开发属于偏底层的开发,主要编程语言是C和汇编.所以本文要讲的source文件主要指的就 ...

  3. Eclipse java项目将普通文件转化为Source文件的操作

    前提:该项目中已经将原有的Source folder删除掉. 右键单击普通文件>Build path>Use as Source Folder.

  4. How to build windows azure PowerShell Source Code

    Download any version source code of Windows Azure Powershell from https://github.com/Azure/azure-sdk ...

  5. vue-cli项目 build后请求本地static文件中的 json数据,路径不对,报错404处理方法

    vue-cli 项目 build  出错点: 1,build生成dist 放在tomcat上 报错,不显示内容  解决办法: config>index.js===>assetsPublic ...

  6. Linux下source文件两种方法

    1.直接source命令加文件 source /etc/rc.d/init.d/functions 2.点(.)加文件 . /etc/rc.d/init.d/functions

  7. docker build doris-0.11.20-release source code

    1. pull doris dev docker image sudo docker pull apachedoris/doris-dev:build-env-1.1 2. dowload doris ...

  8. 转帖---把eclipse默认的编译文件夹build改为web-inf/classess文件夹

    1.在web-info下新奸classess文件夹 2.右键项目  3.选择java build path ————————————

  9. 3)利用Build.php自动创建目录和文件

    (1)首先做法参照: thinkphp5的手册的  命令行--->自动生成目录结构 或者看云的资料:https://www.kancloud.cn/manual/thinkphp5/118021 ...

随机推荐

  1. odoo.cli.main()做了什么?

    先把代码贴过来 def main(): args = sys.argv[1:] # The only shared option is '--addons-path=' needed to disco ...

  2. 《C与指针》第一章练习

    本章例程 程序1.1 重排字符 #include <stdio.h> #include <stdlib.h> #include <string.h> #define ...

  3. F1 分数

    F1 分数会同时考虑精确率和召回率,以便计算新的分数. 可将 F1 分数理解为精确率和召回率的加权平均值,其中 F1 分数的最佳值为 1.最差值为 0: F1 = 2 * (精确率 * 召回率) / ...

  4. Android学习二:Http操作

    1.初步认识HTTP HTTP(Hypertext Transfer Protocol超文本传输协议)是网络应用层协议,建立在TCP/IP基础上,HTTP使用可靠的TCP连接,默认端口是80. 较常用 ...

  5. AS2使用ExternalInterface

    以下代码是帧脚本(选中某帧F9,粘贴) import flash.external.ExternalInterface; // 假的,目的是为了执行createButton里面的ExternalInt ...

  6. Array补充方法

    Array.prototype.Contain = function (item) { var arr = this; if (arr == null || arr.length == 0) { re ...

  7. mysql 安装日志

    善于使用 mysqld.exe --console 来得到提示

  8. 51nod 1471 小S的兴趣 sqrt

    小S喜欢有趣的事.但是,每个人的兴趣都是独特的.小S热衷于自问自答.有一天,小S想出了一个问题. 有一个包含n个正整数的数组a和针对这个数组的几个问题.这些问题有两种类型: 1.      在数组下标 ...

  9. mysql中in和exists二者的区别和性能影响

    mysql查询语句in和exists二者的区别和性能影响 还记得一次面试中被人问到in 和 exists的区别,当然只是草草做答,现在来做下分析. mysql中的in语句是把外表和内表作hash 连接 ...

  10. nodejs初探(四)实现一个多人聊天室

    我们实现的思路是,当有一个人发送过来消息,我们就广播给其他客户端. var net = require('net'); var chatServer = net.createServer(), cli ...