【问题标题】:Automake Variables to tidy up Makefile.amAutomake 变量整理 Makefile.am
【发布时间】:2011-09-21 17:37:11
【问题描述】:

我有一个目录 /src 包含我所有的源文件,以及 /bin 用于在运行 make 命令后存储所有二进制文件。目录如下:

/BuildDirectory
- - /src
- - /bin
- - configure
- - Makefile.am
- - configure.ac 
- - ... 

现在在 Makefile.am 中,我必须指定:

bin_PROGRAMS = bin/x bin/y bin/z bin/k ...

bin_x_SOURCES = src/x.cpp
bin_y_SOURCES = src/y.cpp
bin_z_SOURCES = src/z.cpp

是否有任何变量可以帮助摆脱所有 "bin/" 和 "src/" ? 例如我只是指定:

$BIN = bin
$SRC = src 

他们会在正确的文件夹中寻找正确的文件并将其编译到正确的位置。

谢谢

【问题讨论】:

    标签: c++ configuration makefile automake gnu-make


    【解决方案1】:

    您可以利用远程构建。将此 makefile 放在 bin 目录中:

    VPATH = ../src
    bin_PROGRAMS = x y z k ...
    
    x_SOURCES = x.cpp
    y_SOURCES = y.cpp
    z_SOURCES = z.cpp
    

    现在用这个替换当前的 Makefile.am:

    SUBDIRS = bin
    

    现在调整您的 configure.ac 以生成 bin/Makefile

    AC_CONFIG_FILES([Makefile
            bin/Makefile])
    

    你应该为生活做好准备。

    【讨论】:

    • 我认为 VPATH 是我需要的!很棒的信息
    【解决方案2】:

    据我所知。如果您希望将编译后的文件与源文件分开,请记住您可以在树之外构建:

    $ cd foo-1.2.3
    $ mkdir build
    $ cd build
    $ ../configure
    $ make
    $ make install
    

    如果这是您想要做的,您可以通过创建不带目录前缀的二进制文件来简化 Makefile.am(并且仍然手动引用 src/ 中的内容)。

    【讨论】:

    • 使用 make 提供的远程构建支持是一个更好的解决方案,虽然我不知道这个:)
    【解决方案3】:

    如果您尝试做的事情是我认为您正在尝试做的事情,那么您正在尝试实现以下目标:

    SRCDIR  = src
    BINDIR  = bin
    
    bin_PROGRAMS = $(BINDIR)/x $(BINDIR)/y $(BINDIR)/z
    
    bin_x_SOURCES = $(SRCDIR)/x.cpp
    bin_y_SOURCES = $(SRCDIR)/y.cpp
    bin_z_SOURCES = $(SRCDIR)/z.cpp
    

    我已经以各种形式对此进行了几次测试,但它不会像您的示例那样编译代码;我以某种方式说服它在某个阶段编译 C:

    gmake[1]: *** No rule to make target `bin/x.c', needed by `x.o'.  Stop.
    

    因此,我相当肯定这是不可能的。对不起。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-11
      • 1970-01-01
      • 1970-01-01
      • 2015-11-18
      相关资源
      最近更新 更多