我想切换到使用Jam作为我的构建系统。目前,我有一个src,include和build目录,我想知道如何让Jam将目标文件放入build目录并在include目录中搜索include文件。Jam中的单独构建目录和包含目录
回答
适合你使用果酱!我想你会发现它比makefile更容易,一旦你经历了一些奇怪的事情。
你问的是我经常使用的设置。在顶层,我有三个目录:src,inc和build。还有一个名为Jamfile的文件:
# top-level Jamfile
SubDir . ;
SubInclude src ;
SubInclude build ;
的子目录行建立目录结构中该文件的位置,似乎是必要的果酱工作。 (我认为Jam可能被设计为不需要它,但是它就是这样。)SubInclude行告诉Jam包含两个子目录。 inc子目录不包含在内,因为没有任何内容需要直接编译;其所有内容将被其他文件包含。
在公司,我有一个头文件名为header.h:
/* header.h */
#define MESSAGE "Hello world!"
在SRC,我的主要程序的源代码,main.c中:
/* main.c */
#include "header.h"
#include <stdio.h>
int main(int argc, char** argv)
{
printf("%s\n", MESSAGE);
return 0;
}
而且SRC内是另一个包含以下内容的Jamfile:
# src/Jamfile
SubDir .. src ;
HDRS += ../inc ;
Library helloworld : main.c ;
SubDir行在目录结构中查找Jamfile。 HDRS行告诉Jam哪里可以找到额外的头文件(当时间到了的时候它会传递给编译器)。请注意使用+ =运算符,该运算符附加到现有变量。 Library行告诉Jam从main.c中构建一个库(是的,一个带main()的库有点奇怪,但在像这样的小项目中可以)。
在构建是单一的Jamfile:
# build/Jamfile
SubDir .. build ;
Main helloworld ;
LinkLibraries helloworld : helloworld ;
SubInclude .. src ;
的子目录线所在的目录结构中的的Jamfile。主线告诉Jam构建一个名为helloworld的可执行文件。请注意,它没有源文件相关性。如果是这样,它看起来像Main hello world : foo.c ;
。 LinkLibraries行告诉Jam将helloworld可执行文件与库(也称为helloworld)链接起来。在这种情况下,可执行文件和库名称相同,但在真正的程序中,您可能希望为它们提供不同(更好)的名称。 SubInclude行告诉Jam查看src目录以获取更多代码。这是如何解决可执行文件和库之间的依赖关系。这条线最后是重要的。
现在,如果您导航到构建目录并执行jam命令,Jam将在src中构建一个helloworld.a文件,并将其链接到build中的helloworld可执行文件中。
因为src中的所有代码都被编译到一个库中,所以没有剩下的.o文件。毕竟,它们都存储在.a文件中,这是一个档案。如果你在build中有其他的源文件(比如上面提到的假设的foo.c),那么在编译之后你会在build目录中留下.o文件。
祝你好运。我从Perforce website以及实验中了解了大部分关于Jam的知识。Jam的主要Perforce页面是here。
- 1. IntelliJ包含一个包含在排除目录中的目录?
- 2. 在MSBuild中包含具有单独指定目录的文件
- 3. 与Gyp和忍者一起使用单独的构建目录
- 4. ASP.NET单独的javascript目录结构
- 5. 获取目录包含目录的目录名称
- 6. 在Bundle.config中包含目录
- 7. 在Clion中包含目录
- 8. Cabal:构建目录的目录
- 9. CMake的构建和项目目录
- 10. 在一个单独的目录中构建cscope.out文件
- 11. Makefile:构建在一个单独的目录树中
- 12. Qt和QMake构建目录
- 13. PECL和PHP构建目录
- 14. Eclipse CDT的内建包含目录
- 15. 重命名目录和一些包含的文件/子目录
- 16. 删除包含非空子目录和文件的目录
- 17. 从单独的目录
- 18. 的Visual C++包含目录
- 19. Cmake:在包含路径中构建目录
- 20. 构建目录中的所有项目
- 21. CMake - 包含项目以外的目录
- 22. 包的Laravel4目录结构
- 23. 在Cmake中包含库和目录包含的共享对象
- 24. 目录中包含的Mv文件到目录/新路径
- 25. 批量使文件名中包含子目录的目录
- 26. .htaccess根目录中的Wordpress问题和子目录中的单独安装
- 27. 获取包含自定义构建步骤的目录
- 28. 的ActionScript包命名和目录结构
- 29. 生成的查询包含的架构和目录名称
- 30. 在单个目录中包含多个C++ Eclipse Helios项目