Bei der Verwendung von CMake für das Cross Compiling wird generell eine Toolchain-Datei über die Option CMAKE_TOOLCHAIN_FILE
angegeben. In GNU terminology kann das Host-Architektur-Toolset mit dieser Datei angegeben werden. Man kann jedoch im Allgemeinen nicht erwarten, etwas ausführen zu können, das mit dieser Toolchain erstellt wurde. So oft müssen einige Build-Tools für die Build-Architektur kompiliert werden.Wie CMake anweisen, den Build-Architektur-Compiler zu verwenden?
Betrachten Sie das folgende Setup. Ich habe zwei Quelldateien genfoo.c
und bar.c
. Während des Builds muss genfoo.c
kompiliert und ausgeführt werden. Seine Ausgabe muss in foo.h
geschrieben werden. Dann kann ich bar.c
, die #include "foo.h"
kompilieren. Da CMake standardmäßig die Toolchain der Host-Architektur verwendet, sind die Anweisungen für bar.c
einfach. Aber wie sage ich es, um die Build-Architektur-Toolchain zum Kompilieren genfoo.c
zu verwenden? Wenn Sie einfach add_executable(genfoo genfoo.c)
sagen, wird der falsche Compiler verwendet.
Wie Sie haben In GNU-Terminologie würden Sie den 'configure'-Befehl verwenden, um die Host-Architektur anzugeben. Und Sie müssten "configure" zweimal ausführen, wenn Sie für zwei verschiedene Host-Umgebungen erstellen möchten. Also sehe ich zwei Möglichkeiten mit CMake: benutze ein Build-Skript, das die zwei benötigten Umgebungen erstellt und ausführt (siehe [hier] (http://stackoverflow.com/questions/30999130/cmake-build-multiple-targets-in-different-) Build-Verzeichnisse)) oder verwenden Sie [ExternalProject_Add()] (https://cmake.org/cmake/help/v3.2/module/ExternalProject.html) und teilen Sie Ihre 'CMakeLists.txt' in dedizierte Teilprojekte auf. – Florian
Nein, mit Autotools verwenden Sie einfach 'CC_FOR_BUILD'. Siehe 'ax_cc_for_build'. – Helmut
Ok, wusste das nicht. Wenn ich richtig verstehe, sprechen wir über den Anwendungsfall, der in [CMake Cross Compiling - Ausführbare Dateien in dem während des Builds erstellten Build] beschrieben wird (https://cmake.org/Wiki/CMake_Cross_Compiling#Using_executables_in_the_build_created_during_the_build)? – Florian