При использовании CMake для кросс-компиляции, обычно указывается файл инструментальной привязки с помощью опции CMAKE_TOOLCHAIN_FILE
. В терминология GNU можно указать набор инструментов архитектуры хоста, используя этот файл. Однако, как правило, нельзя ожидать, что вы сможете выполнить что-либо, построенное с помощью этой инструментальной цепочки. Достаточно часто некоторые компиляторы должны быть скомпилированы для архитектуры сборки.
Рассмотрим следующую настройку. У меня есть два исходных файла genfoo.c
и bar.c
. Во время сборки, genfoo.c
необходимо скомпилировать и запустить. Его вывод должен быть записан в foo.h
. Тогда я могу скомпилировать bar.c
, который #include "foo.h"
. Поскольку CMake по умолчанию использует инструментальную цепочку хост-архитектуры, инструкции для bar.c
просты. Но как я могу сказать, что для создания genfoo.c
используется инструментальная цепочка архитектуры построения? Просто говоря add_executable(genfoo genfoo.c)
приведет к использованию неправильного компилятора.