2019年12月14日10時51分06秒
cmakeのは、クロスプラットフォームのインストール(ある編集)ツールは、すべてのプラットフォーム(コンパイル)のインストールを記述するために、簡単な文を使用することができます。本論文では、どのようにクロスコンパイラを達成するためにcmakeのを使用します。X_86上およびARM Linux上で実行することを実行可能なプログラムがあります。ARMのやり方でコンパイル通常X_86のgccのコンパイルされたコード上のさまざまな方法が、コンパイラを持って対応し、それらは通常のクロスです。cmakeのでlinuxで使用されるクロスコンパイラを導入します。
1、クロスコンパイラ設定ファイルの作成
ファイルtoolchain.cmakeに名前を付け、設定ファイルは、コンパイラSYSROOT、CC、CXXおよびその他のオプションセットを指定して、コンパイラを指定することで、さまざまなクロスツールチェーンの構成は基本的な構成は同じである、わずかに異なっています。
1台の、このようなARM Linuxのかなど、ターゲットオペレーティングシステム名は、記述する必要が#ターゲット・マシン「のLinux 」は、Windowsプラットフォームを書く場合は、「Windowsの場合」 OSに関連していない、あなたの組み込みプラットフォームは、あなたが記述する必要がある場合は、「ジェネリックを」、 CMAKE_SYSTEM_NAMEこの変数が設定されている場合にのみ、CMakeのは、これがクロスコンパイラであると考えられていた、それは変数の追加設定します 2#CMAKE_CROSSCOMPILINGがTRUE 4#これ される必要 5 セット(CMAKE_SYSTEM_NAME Linux)の 6 7 セット(USER_PATHを「.... 。" ) 8 9 位変化のルートパスに関連するフォルダパスの数を表し、指定されたルートディレクトリにコンパイラは、対応するシステムライブラリ検索する 10 SETを(CMAKE_SYSROOT $ {USER_PATH} / GCC-eglibc-ロケール内部 -arm-OE-Linuxベースgnueabi- 6.4。0 / mdm9607) 11セット(CMAKE_FIND_ROOT_PATH $ {USER_PATH} / GCC-eglibc-ロケール内部 -arm-OE- Linuxベースgnueabi- 6.4。0 / mdm9607) 12 13#指明C和C ++ 编译器 14 セット(ツール$ {USER_PATH} / GCC-eglibc-ロケール内部 -arm-OE-Linuxベースgnueabi- 6.4。0 / x86_64- Linuxのは/ usr / binに/アーム-OE-linux- gnueabi) 15 16 セット(CMAKE_C_COMPILER $ {ツール} /アーム-OE-Linuxベースgnueabi-GCC) 。17 SET(CMAKE_CXX_COMPILER $ {ツール} / ARM-OE-Linuxベースgnueabi-G ++ ) 18である 。19 #コンパイル時にいくつかのオープンソースのライブラリは、OpenSSLライブラリを依存し、OpenSSLのライブラリとヘッダファイルを示す 20がある SET(OPENSSL_LIBRARIES $ { } USER_PATH / eglibc-GCC-ロケール内部 -arm gnueabi - OE-Linux- 6.4。0 / mdm9607は/ usr / libに) 21である(OPENSSL_INCLUDE_DIR USER_PATH} {$ / eglibc-GCC-ロケールSET 内部 -arm-OE- gnueabi - Linuxの6.4。0 / mdm9607は/ usr /含める/ OpenSSLの) 22は、 23があります FIND_PROGRAM()関数の#、3つの値、NEVER、ONLY、BOTH、あなたCMAKE_FIND_ROOT_PATHを見ていない第1の表現があり、もう一つはこのパスのみで見つけることです、そして第三は、パスアップ最初の外観を表しそして、この変数のグローバルパスを見つけ、番組のホストは、一般的に呼ばれ、それは一般NEVERに設定されている 24 組(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 25 26 以下の3つのオプションのみクロス環境でライブラリとヘッダを見つける表す#ファイル 27 SET (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 28 SET (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 29 SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
設定ファイルを指定するには、コンパイル時に必要cmakeの-DCMAKE_TOOLCHAIN_FILE = .. / cmakeの/ toolchain.cmake ../ CMAKE_TOOLCHAIN_FILEで、これは、コンフィギュレーションファイルことを示しています。CMakeLists.txtをコンパイルするファイルを選択し../。
図2に示すように、クロスコンパイルカールコード
CMakeLists.txtカールを呼び出すとき、あなたはCMakeLists.txtを設定する必要があります。上部CMakeLists.txtを介してこれらの構成パス。ライブラリーの一番上の書き方で見てみましょう。ADD_SUBDIRECTORY(カール)は通常、我々はサードパーティ製の外部ライブラリにコンパイル方法を持って、次CMakeLists.txtを呼び出します。
1 cmake_minimum_required(バージョン3.10。0 ) 2 。3 #ヘッダファイル、ライブラリ作成、実行可能プログラムのインストールパスで指定された 。4 SET(CMAKE_INSTALL_PREFIX " $ {} CMAKE_INSTALL_PREFIX " ) 。5 SET(CMAKE_INSTALL_LIBDIR " $ {CMAKE_INSTALL_LIBDIR} " ) 。6 SET( CMAKE_INSTALL_BINDIR " $ {CMAKE_INSTALL_BINDIR} " ) 。7 SET(CMAKE_INSTALL_INCLUDEDIR " $ {CMAKE_INSTALL_INCLUDEDIR} " ) 。8 。9つの #は、印刷デバッグを行います 10メッセージ(STATUS 「カールで------------------------- ------------------ - " ) 11メッセージ(STATUS " CMAKE_INSTALL_LIBDIR:$ {CMAKE_INSTALL_LIBDIR} " ) 12メッセージ(STATUS " CMAKE_INSTALL_BINDIR:$ {CMAKE_INSTALL_BINDIR} " ) 13メッセージ(STATUS " CMAKE_INSTALL_INCLUDEDIR:$ {CMAKE_INSTALL_INCLUDEDIR} " ) 14メッセージ(STATUS " CMAKE_CROSSCOMPILING:$ {CMAKE_CROSSCOMPILING} " ) 15メッセージ(STATUS " CMAKE_C_COMPILER:$ {} CMAKE_C_COMPILER" ) 16メッセージ(STATUS " CMAKE_CXX_COMPILER:$ {CMAKE_CXX_COMPILER} " ) 17メッセージ(STATUS " PROJECT_SOURCE_DIR:$ {PROJECT_SOURCE_DIR} " ) 18メッセージ(STATUS " VERBOSE_MESSAGES:$ {VERBOSE_MESSAGES} " ) 19メッセージ(STATUS " CMAKE_BUILD_TYPE:$ { CMAKE_BUILD_TYPE} " ) 20メッセージ(STATUS " カールで------------------------- -------------- ----- ") 21人の コンパイル#指定された外部の作品 22 (ExternalProject)を含む 23 24- SET(CURL_BUILD_DIR $ {CMAKE_BINARY_DIR} / ソース) 25 26れる #コンパイル命令するように構成された 27 IF (CMAKE_CROSSCOMPILING) 28 クロスコンパイラを指定した場合#クロスコンパイラは、CMAKE_CROSSCOMPILINGがTRUEに設定されている 29のメッセージ(STATUS " $ {CMAKE_CROSSCOMPILING:CURL CMAKE_CROSSCOMPILING ----------------------------------} " ) 30 SET (CMAKE_CONFIGURE_COMMAND 31は CMakeの 32 -DCMAKE_INSTALL_PREFIX = $ {CMAKE_INSTALL_PREFIX } 33は -DCMAKE_INSTALL_LIBDIR = $ {} CMAKE_INSTALL_LIBDIR 34で -DCMAKE_INSTALL_BINDIR = $ {} CMAKE_INSTALL_BINDIR
#指明依赖的にOpenSSL的库路径 35 -DOPENSSL_ROOT_DIR = $ {OPENSSL_LIBRARIES} 36 -DOPENSSL_LIBRARIES = $ {OPENSSL_LIBRARIES} 37 -DOPENSSL_INCLUDE_DIR = $ {OPENSSL_INCLUDE_DIR} 38 -DCMAKE_INSTALL_INCLUDEDIR = $ {CMAKE_INSTALL_INCLUDEDIR} 39 -DVERBOSE_MESSAGES = $ {VERBOSE_MESSAGES} 40 - DCMAKE_BUILD_TYPE = $ {CMAKE_BUILD_TYPE} 41 -DNROFF_USEFUL = 0 42 --enable- FTP 43 --enable- TFTP 44 -DBUILD_CURL_EXE = 0 45 -DENABLE_ARES = 0 46 -DUSE_ARES = 0 47 -DBUILD_TESTING = 0 48 -DENABLE_MANUAL = 0 49 -DBUILD_SHARED_LIBS = 0 50 -DCMAKE_TOOLCHAIN_FILE = $ {CMAKE_TOOLCHAIN_FILE} 51 ) 52 他() 53 #gcc编译 54メッセージ(STATUS 」CURL GCC。 $ {CMAKE_CROSSCOMPILING} ---------------------------------- 」) 55 セット(CMAKE_CONFIGURE_COMMAND 56 cmakeの 57 -DDAMS_ROOT_DIR = $ {} CMAKE_SOURCE_DIR 58 -DCMAKE_INSTALL_PREFIX = $ {CMAKE_INSTALL_PREFIX} 59 -DCMAKE_INSTALL_LIBDIR = $ {CMAKE_INSTALL_LIBDIR} 60 -DCMAKE_INSTALL_BINDIR = $ {CMAKE_INSTALL_BINDIR} 61 -DOPENSSL_ROOT_DIR =は/ usr / local / SSL 62 -DOPENSSL_LIBRARIES =は/ usr / local / SSL / LIB 63 -DOPENSSL_INCLUDE_DIR = / usr / local / SSL / 含む 64 -DCMAKE_INSTALL_INCLUDEDIR = $ {CMAKE_INSTALL_INCLUDEDIR} 65 -DVERBOSE_MESSAGES = $ {VERBOSE_MESSAGES} 66 -DCMAKE_BUILD_TYPE = $ {CMAKE_BUILD_TYPE} 67 -DNROFF_USEFUL =0 68 --enable- FTP 69 --enable- TFTP 70 -DBUILD_CURL_EXE = 0 71 -DENABLE_ARES = 0 72 -DUSE_ARES = 0 73 -DBUILD_TESTING = 0 74 -DENABLE_MANUAL = 0 75 -DBUILD_SHARED_LIBS = 0 76 ) 77 ENDIF() 78 79 ExternalProject_Add( 80 CURL 81 PREFIX $ {CURL_BUILD_DIR} 82 TMP_DIRカール 83 DOWNLOAD_DIRの$ {CURL_BUILD_DIR} 84 DOWNLOAD_COMMAND CP -rf $ {CMAKE_SOURCE_DIR} /パッケージ/カール/ curl- 7.64。0 $ {CURL_BUILD_DIR} 85 SOURCE_DIR $ {CURL_BUILD_DIR} / curl- 7.64。0 86 CONFIGURE_COMMAND $ {CMAKE_CONFIGURE_COMMAND} $ {CURL_BUILD_DIR} / curl- 7.64。0 87 BUILD_ALWAYS 1 88 curl- BINARY_DIR $ {CURL_BUILD_DIR} / 7.64。0 89 BUILD_COMMANDする 90 INSTALL_COMMANDメイクインストール 91 LOG_CONFIGURE $ {LOG_LEVEL} 92 LOG_BUILD $ {LOG_LEVEL} 93 たlog_install $ {LOG_LEVEL} 94)