【问题标题】:How can I build different versions of a project using the Jam make tool?如何使用 Jam make 工具构建项目的不同版本?
【发布时间】:2009-03-08 21:39:27
【问题描述】:

我有一个 C++ 项目,它可以编译成不同的版本,包括发布、调试、共享库和可执行文件,每个版本都有不同的编译器标志。我正在尝试将 Jam 作为 Make 的替代品,因为它看起来像一个更简单的系统。

Jam 能做到这一点吗?主要问题是它总是将 .o 文件与源文件放在同一个文件夹中,因此在构建多个版本时会覆盖它们。

更新

我找到了一个似乎可行的解决方案。使用此文件,我可以构建库或可执行文件的调试和发布配置。

构建发布库的命令:

jam -s config=lib -s release=1

如果您只输入jam,它会构建调试可执行文件。这是 Jamfile:

FILES = 
    main.cpp 
    ;

BASENAME = steve ;
OBJ = obj ;

if $(release) 
{
    OBJ = $(OBJ)r ;
} 
else 
{
    DEFINES += DEBUG ;
    OBJ = $(OBJ)d ;
}

if $(config) = lib 
{
    OBJ = $(OBJ)_lib ;
    OUTFILE = lib$(BASENAME).so ;
    DEFINES += SHARED_LIBRARY ;
    LINKFLAGS += 
        -shared -Wl,-soname,$(OUTFILE) -fvisibility=hidden -fPICS 
    ;
} 
else 
{
    OUTFILE = $(BASENAME) ;
}

LOCATE_TARGET = $(OBJ) ;
MkDir $(LOCATE_TARGET) ;
Main $(OUTFILE) : $(FILES) ;

【问题讨论】:

    标签: c++ makefile jam


    【解决方案1】:

    我对 Perforce 的 Jam 并不熟悉,但是 bjam 允许这样做——而且非常简单。 bjam 没有把中间文件和源放在同一目录下;它会根据您正在构建的项目类型创建 debug/release/static/shared 目录。

    例如,如果您想构建一个库的发布和调试版本,并且您希望静态构建它:

    bjam debug release link=static
    

    bjam 确实有一些怪癖,但我们发现它非常有效。目前我们使用(几乎)相同的构建脚本来构建我们的系统,使用 msvc(8.0 和 9.0)、x86 上的 gcc 4.3、ARM 上的 gcc 3.4 和 PowerPC 上的 gcc 4.3。非常好。

    【讨论】:

      【解决方案2】:

      是的,它可以做到这一点。它被称为“变体”,boost.build 带有预定义的“调试”和“发布”。也可以添加自己的“功能”,定义它们 因为链接不兼容会将生成的目标文件放到不同的子目录中:

      功能魔法:关闭打开:传播复合;

      feature.compose on : USE_MAGIC ;

      我发现易于维护共存的变体是最强大的功能之一 提升.build.此外,维护项目层次结构非常容易(例如,应用程序 需要图书馆);这是在文件级别完成的,而不是通过递归到目录中,使并行构建非常有效。

      【讨论】:

        【解决方案3】:

        构建系统的普及很重要,因为这意味着您组织中的更多人(以及未来的员工)可能知道它并能够支持它。

        我会说不要这样做。不要使用果酱。无论如何,除了boost之外还有人使用它吗?例如,我认为 Ant 是一个更受欢迎的系统,而且我发现它更容易学习。帮您的组织一个忙,不要碰果酱。

        【讨论】:

        • 他没有问要不要用果酱。
        • 最终你是对的。 Jam 有很多怪癖,以至于有一天我只是从头到尾阅读了 gmake 手册。现在我可以在 Makefiles 中做任何事情了。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-17
        相关资源
        最近更新 更多