0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Apple silicon Mac の CLion + クロスコンパイラで、"オプション-archは無い" と言われた話

Last updated at Posted at 2025-06-23

Toolchainにクロスコンパイラを設定したが、CMakeのチェックが通らない!

AppleシリコンMac上のCLionで, Setting->Build execution, debug->Toolchain にarm-none-eabi-gccを登録するとCMakeのチェックが自動で走る。

このチェック、クロスコンパイラを指定しても、なぜかapplieシリコン用コンパイラで使われる"-arch"というオプションが使われてしまう。arm-none-eabi-gccには"-arch"というオプションがないのでエラーになる。

そこで、どうするか。

まず正しいコンパイラを取ってくる。

brew install arm-none-eabi-gcc

とかで取ってくると、includeファイル等が含まれないバイナリだけインストールされる。インストールはこちら。

brew install --cask gcc-arm-embedded

間違ってインストールしてしまっていたら、

brew uninstall arm-none-eabi-gcc
brew autoremove

等でアンインストールしておく。

Setting->Build execution, debug->Toolchain ... ではない。

このページでコンパイラを指定すると、直後にCMakeのチェックが自動で走る。arm-none-eabi-gccを設定してもなぜかAppleシリコン用の-archオプションが設定されるのでエラーが発生する。ここのチェックがどのcmakefile.txtから行われるかは追い切れなかった。

-arch error .png

Vsicual StudioやHEWに慣れていると、ここでクロスコンパイラを指定したくなる。ところがこのページには設定箇所がほとんどない。仕方が無いのでCLionはここでクロスコンパイラの切替は行わず、mac用コンパイラのみを設定するようにうにする。

クロスコンパイラの指定は、プロジェクトのCMakefile.txtで行う。

CubeMXが生成するCMakefile.txtを確認する。

CubeMXのような組み込み用cmake生成ツールで作成されたCMakefile.txtには、arm-none-eabi-gcc等のクロスコンパイラの設定が入っているので確認する。クロスコンパイラまでのパスが通っていることも確認する。確認は

which arm-none-eabi-gcc

で行える。

CMakeの引数の設定で、Appleシリコン用のコンパイルオプションを回避する。

この時点でTools->CMake->Reset Cache and Reload Projedectを選択すると、CMakeの事前チェックが走る。このときはルートのCMakefile.txtと、Setting->Build execution, debug->CMakeで指定した実行環境が使用される。何もしないと、ここでも事前チェックで-archが設定されてしまい、エラーで終わる。

これを避けるには、CMakeのコマンドラインオプションに-archのチェックをさせないオプションを指定する。 Setting->Build execution,debug->CMake のCMkaeオプションに

-DCMAKE_SYSTEM_NAME=Generic

を指定する。

generic.png

何も記入されていないときにデフォルトのオプションがグレーで表示されているが、かまわずこれだけを記入すると、グレーで書かれていたオプションに追加となる。これで-archのオプションが指定されなくなる。

この指定はCMakefile.txtの冒頭でsetコマンドにて指定することも可能だが、これだとなぜか事前チェックが通らないので引数で指定するのがよかった。

またtoolchain.cmakeを用意して、その中のsetコマンドで上記を指定 -> コマンドラインオプションでtoolchainを指定でも回避できるが、どのみちコマンドラインオプションを指定しなければならないので、新たにファイルを用意するよりはcmakeの引数で設定するほうがスマートだと思う。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?