2014-09-22 3 views
3

Я использую настраиваемую цепочку компиляции, и у меня есть несколько целей, которые необходимо скомпилировать, однако их нужно скомпилировать с использованием разных компиляторов cxx. Можно ли это использовать с помощью automake? Кажется, что это невозможно сделать что-то вроде:Automake: для каждого целевого компилятора

target_CXX = ... 

В идеале я хотел бы что-то вроде:

target1_SOURCES = ... 
target2_SOURCES = ... 

target1_CXX = ... 
target1_CXXFLAGS = .. 

target2_CXX = ... 
targer2_CXXFLAGS = ... 

Или еще лучше на самом деле, имея target1 использовать определенный target1_CXX и TARGET2, используя обычный флаг CXX ,

Target1 должен быть noinst и генерировать только объектные файлы. Эти объектные файлы затем должны использоваться в target2 (определенном с использованием LDADD) для генерации полного двоичного файла.

Спасибо!

ответ

1

То, что вы описываете, может быть сделано с помощью автотестов, но не легко. По умолчанию в autotools используется только одна toolchain (хост toolchain, например CC, CXX и т. Д.). Также можно использовать и build toolchain.

То, что вам нужно сделать в этой ситуации, будет очень похоже на то, что делает AX_PROG_CXX_FOR_BUILD (макрос сборки toolchain, на который ссылаются выше, и его зависимые макросы). В основном, он делает еще одну копию всех тестов компилятора 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) 

могли бы работать, чтобы связать их вместе.

+0

Большое спасибо за ваш ответ. Возможно, мне следовало бы уточнить мой вопрос. Фактически мне нужно, чтобы target1 был noinst и генерировал только объектные файлы, эти объектные файлы будут использоваться (используя LDADD) вместе с target2 для создания окончательного двоичного файла. Я обновил свой вопрос, чтобы отразить это. – AzaraT

+0

Это отвечает только на половину вопроса, не так ли? Это позволяет тестировать (и устанавливать в * _FOR_BUILD) альтернативную инструментальную цепочку, но не компилировать некоторые объекты с помощью $ CXX и других с помощью $ CXX_FOR_BUILD – Cimbali