我正在使用自定义编译链,我有多个需要编译的目标,但是需要使用不同的cxx编译器进行编译。使用automake可以吗?似乎不可能做这样的事情:
target_CXX = ...
理想情况下,我想要的是:
target1_SOURCES = ...
target2_SOURCES = ...
target1_CXX = ...
target1_CXXFLAGS = ..
target2_CXX = ...
targer2_CXXFLAGS = ...
甚至更好,让target1使用正常的CXX标志使用定义的target1_CXX和target2。
Target1应该是一个noinst,并且只生成目标文件。然后应在target2(使用LDADD定义)中使用这些目标文件来生成完整的二进制文件。
谢谢!
答案 0 :(得分:1)
您所描述的内容可以通过autotools完成,但不容易。默认情况下,autotools仅使用一个工具链(主机工具链,例如CC
,CXX
等)。也可以使用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)
可能会将它们链接在一起。