【问题标题】:Automake: per target compilerAutomake:每个目标编译器
【发布时间】:2014-09-22 10:42:24
【问题描述】:

我正在使用自定义编译链,并且我有多个需要编译的目标,但是它们需要使用不同的 cxx 编译器进行编译。这可以使用自动制作吗?似乎无法执行以下操作:

target_CXX = ...

理想情况下,我想要这样的东西:

target1_SOURCES = ...
target2_SOURCES = ...

target1_CXX = ...
target1_CXXFLAGS = ..

target2_CXX = ...
targer2_CXXFLAGS = ...

或者实际上更好的是,让 target1 使用定义的 target1_CXX,让 target2 使用普通的 CXX 标志。

Target1 应该是一个 noinst,并且只生成目标文件。然后应该在 target2(使用 LDADD 定义)中使用这些目标文件来生成完整的二进制文件。

谢谢!

【问题讨论】:

    标签: compilation autoconf automake


    【解决方案1】:

    您所描述的可以使用自动工具完成,但并不容易。默认情况下,autotools 只使用一个工具链(host 工具链,例如CCCXX 等)。也可以使用build toolchain

    在这种情况下您将要做的与AX_PROG_CXX_FOR_BUILD(上面引用的构建工具链宏及其相关宏)非常相似。基本上,它使用一组不同的输出变量制作所有 C++ 编译器测试的另一个副本。

    然后是这样的:

    $(target1_OBJECTS) := $(target1_SOURCES:.cc=.o)
    $(target1_OBJECTS) : CXX = $(CXX_FOR_BUILD)
    $(target1_OBJECTS) : CXXFLAGS = $(target1_CXXFLAGS)
    $(target1_OBJECTS) : CPPFLAGS = $(CPPFLAGS_FOR_BUILD)
    
    ...
    
    target2_LDADD = $(target1_OBJECTS)
    

    可能会将它们联系在一起。

    【讨论】:

    • 非常感谢您的回复。也许我应该更好地澄清我的问题。实际上,我需要让 target1 成为一个 noinst 并且只生成目标文件,这些目标文件将与 target2 一起使用(使用 LDADD)来创建最终的二进制文件。我已经更新了我的问题以反映这一点。
    • 这只能回答一半的问题,不是吗?它允许测试(并在 *_FOR_BUILD 中设置)替代工具链,但不能用 $CXX 编译一些目标,而用 $CXX_FOR_BUILD 编译其他目标
    猜你喜欢
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    相关资源
    最近更新 更多