首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Jam中分离build目录和include目录

在Jam中分离build目录和include目录
EN

Stack Overflow用户
提问于 2011-10-22 16:10:01
回答 1查看 1.6K关注 0票数 0

我想改用Jam作为我的构建系统。目前,我有一个src、include和build目录,我想知道如何让Jam将目标文件放到build目录中,并在include目录中搜索include文件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-25 05:36:57

使用Jam对你有好处!我想你会发现它比makefiles容易得多,一旦你克服了它的一些奇特之处。

您所问的是我经常使用的设置。在顶层,我有三个目录: src、inc和build。还有一个名为Jamfile的文件:

代码语言:javascript
复制
# top-level Jamfile
SubDir . ;
SubInclude src ;
SubInclude build ;

Jam行在目录结构中建立了该文件的位置,这似乎是SubDir工作所必需的。(我认为Jam本可以被设计成不需要它,但它就在那里,就这样吧。)SubInclude行告诉Jam包含两个子目录。不包括inc子目录,因为那里没有需要直接编译的内容;它的所有内容都将包含在其他文件中。

在inc中,我有一个名为header.h的头文件:

代码语言:javascript
复制
/* header.h */
#define MESSAGE "Hello world!"

在src中,我有主程序的源代码main.c:

代码语言:javascript
复制
/* main.c */
#include "header.h"
#include <stdio.h>

int main(int argc, char** argv)
{
    printf("%s\n", MESSAGE);
    return 0;
}

在src中还有另一个包含以下内容的Jamfile:

代码语言:javascript
复制
# src/Jamfile
SubDir .. src ;
HDRS += ../inc ;
Library helloworld : main.c ;

SubDir行在目录结构中定位Jamfile。HDRS行告诉Jam哪里可以找到额外的头(当时间到来时,它会把这个传递给编译器)。请注意+=运算符的用法,它会附加到现有变量之后。Library行告诉Jam在main.c之外构建一个库(是的,带有main()的库有点奇怪,但是对于像这样的小项目来说还可以)。

在build中有一个单独的Jamfile:

代码语言:javascript
复制
# build/Jamfile
SubDir .. build ;
Main helloworld ;
LinkLibraries helloworld : helloworld ;
SubInclude .. src ;

SubDir行在目录结构中定位Jamfile。主行告诉Jam构建一个名为helloworld的可执行文件。请注意,它没有源文件依赖项。如果是这样,它看起来就像Main hello world : foo.c ;。LinkLibraries行告诉Jam将helloworld可执行文件链接到一个库,也称为helloworld。在这种情况下,可执行文件和库具有相同的名称是可以的,但在实际的程序中,您可能希望为它们指定不同的(更好的)名称。SubInclude行告诉Jam在src目录中查找更多要构建的代码。这就是如何解决可执行文件和库之间的依赖关系。这一行排在最后是很重要的。

现在,如果您导航到build目录并执行jam命令,Jam将在src中构建一个helloworld.a文件,并将其链接到build中的helloworld可执行文件。

因为src中的所有代码都被编译到一个库中,所以没有剩余的.o文件。它们都存储在.a文件中,毕竟这是一个归档文件。如果您在build中有额外的源文件(如上面提到的假设foo.c ),那么在编译之后,您将在build目录中留下.o文件。

祝你一切顺利。我从Perforce website和实验中学到了大部分关于Jam的知识。Jam的主要Perforce页面是here

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7858218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档