Compilation 自动生成:每个目标编译器

Compilation 自动生成:每个目标编译器,compilation,autoconf,automake,Compilation,Autoconf,Automake,我使用的是自定义编译链,我有多个目标需要编译,但是它们需要使用不同的cxx编译器编译。使用automake可以做到这一点吗?似乎不可能执行以下操作: target_CXX = ... target1_SOURCES = ... target2_SOURCES = ... target1_CXX = ... target1_CXXFLAGS = .. target2_CXX = ... targer2_CXXFLAGS = ... $(target1_OBJECTS) := $(targe

我使用的是自定义编译链,我有多个目标需要编译,但是它们需要使用不同的cxx编译器编译。使用automake可以做到这一点吗?似乎不可能执行以下操作:

target_CXX = ...
target1_SOURCES = ...
target2_SOURCES = ...

target1_CXX = ...
target1_CXXFLAGS = ..

target2_CXX = ...
targer2_CXXFLAGS = ...
$(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)
理想情况下,我想要的是:

target_CXX = ...
target1_SOURCES = ...
target2_SOURCES = ...

target1_CXX = ...
target1_CXXFLAGS = ..

target2_CXX = ...
targer2_CXXFLAGS = ...
$(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使用已定义的target1_CXX和target2使用正常的CXX标志

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


谢谢

您所描述的内容可以通过自动工具完成,但并不容易。默认情况下,自动工具仅使用一个工具链(主机工具链,例如,
CC
CXX
等)。也可以使用“也”

在这种情况下,您将要执行的操作与用于构建的AX\U PROG\U CXX\U(上面引用的构建工具链宏及其相关宏)的操作非常相似。基本上,它用另一组输出变量制作了所有C++编译器测试的另一个副本。 然后是:

target_CXX = ...
target1_SOURCES = ...
target2_SOURCES = ...

target1_CXX = ...
target1_CXXFLAGS = ..

target2_CXX = ...
targer2_CXXFLAGS = ...
$(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\u FOR_BUILD编译其他目标