IARコンパイラを使用したいと思います。 CMakeにはすでにこのコンパイラーに関するたくさんのファイルがあることに気づきました:
https://github.com/jevinskie/cmake/blob/master/Modules/Compiler/IAR.cmake
私が読んだ一般的な解決策から、CMakeLists.txt
のすべてのツールチェーンを手動で指定することができます:
set(CMAKE_C_COMPILER iccarm)
set(CMAKE_CPP_COMPILER iccarm)
CMakeがこれらの定義を「モジュール/コンパイラ/IAR.cmake」にリンクする方法を教えてください。
やらなきゃいけないと思った
include("Modules/Compiler/IAR.cmake")
IARコンパイラを指定する正しい方法は何ですか?
私がする時
cmake .
それでも、IARコンパイラの代わりにgcc
を使用しようとします。どうして?
CMake wiki で説明されているように、特定のコンパイラを選択するには、いくつかの解決策があります。
方法1:環境変数を使用する
CおよびC++の場合、CC
およびCXX
環境変数を設定します。このメソッドは、すべてのジェネレーターで機能するとは限りません。 (具体的には、Xcodeの_GCC_VERSION
_を設定しようとすると、このメソッドはXcodeを混乱させます。)次に例を示します。
_CC=gcc-4.2 CXX=/usr/bin/g++-4.2 cmake -G "Your Generator" path/to/your/source
_
方法2:cmake -Dを使用します
_CMAKE_FOO_COMPILER
_を使用して、コマンドラインで適切な_cmake -D
_変数を有効なコンパイラ名またはフルパスに設定します。例えば:
_cmake -G "Your Generator" -D CMAKE_C_COMPILER=gcc-4.2 -D CMAKE_CXX_COMPILER=g++-4.2 path/to/your/source
_
方法3(回避):set()を使用します
set()
を使用して、リストファイル内の適切な_CMAKE_FOO_COMPILER
_変数を有効なコンパイラ名またはフルパスに設定します。これは、言語が設定される前(つまり、project()
またはenable_language()
コマンドの前)に行う必要があります。例えば:
_set(CMAKE_C_COMPILER "gcc-4.2")
set(CMAKE_CXX_COMPILER "/usr/bin/g++-4.2")
project("YourProjectName")
_
Wikiは、3番目の方法を避けるべき理由を提供していません...
PCの標準コンパイラを使用したくない場合は、CMakeにコンパイラへのパスを与える必要があります。これを行うには、環境変数、ツールチェーンファイル、またはCMakeコマンドラインの直接定義を使用します(例 CMakeLists.txt:30(プロジェクト)でのCMakeエラー:CMAKE_C_COMPILERが見つかりませんでした を参照)。
コンパイラの名前/パスをCMakeLists.txtに入れると、プロジェクトがクロスプラットフォームになるのを防ぎます。
CMakeは 特別なC/C++ファイル をコンパイルして、コンパイラIDをチェックします。そのため、Module/Compiler
またはModule/Platform
から手動で含める必要はありません。
これは、コンパイラとプラットフォームのチェックに基づいてCMakeによって自動的に行われます。
参照
次のようにcmake
を呼び出すことができます。
cmake -DCMAKE_C_COMPILER=iccarm ...
または
cmake -DCMAKE_CXX_COMPILER=...
ツールチェーンファイルを作成し、CmakeForceCompilerモジュールを使用する必要があります。
以下は、ベアメタルのツールチェーンファイルの例ですARM IARを使用した開発:
include(CMakeForceCompiler)
set(CMAKE_SYSTEM_NAME Generic) # Or name of your OS if you have one
set(CMAKE_SYSTEM_PROCESSOR arm) # Or whatever
set(CMAKE_CROSSCOMPILING 1)
set(CMAKE_C_COMPILER iccarm) # Change the arm suffix if appropriate
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) # Required to make the previous line work for a target that requires a custom linker file
最後の行が必要なのは、CMakeがコンパイラーでテストプログラムをコンパイルして、機能することを確認し、プリプロセッサー定義からいくつかのバージョン情報を取得しようとするためです。この行がないと、CMakeはテストプログラムにadd_executable()を使用し、「Cコンパイラ "XXX"は単純なテストプログラムをコンパイルできません。」というエラーが発生します。これは、カスタムリンカーファイルがないため、テストプログラムがリンクに失敗するためです(これは、IARが通常使用されるため、ベアメタル開発を想定しています)。この行は、CMakeに代わりにadd_library()を使用するように指示します。これにより、リンカーファイルなしでテストが成功します。この回避策のソース: このCMakeメーリングリストの投稿 。
次に、ツールチェーンファイルの名前がiar-toolchain.cmakeであると想定して、次のようにCMakeを呼び出します。
cmake -DCMAKE_TOOLCHAIN_FILE=iar-toolchain.cmake .