Atmel Studioで「recipe for target 'main.o' failed」で詰む→全角文字を含むWindowsユーザー名が原因でした
要約
- Atmel Studio 7.0 で
recipe for target 'main.o' failed
と出てビルドできない - Windows のユーザー名に全角文字(全角スペース?)が含まれていることが原因
- Windows の一時ディレクトリを、全角文字を含まないパスへ移動することで解決
経過
Atmel Studio 7.0 をインストールして、さっそく単純なLチカプログラムを作成(ATTiny13A の PB3 に繋いだLEDをただ点滅させる)。
#include <avr/io.h> int main(void) { uint16_t i; DDRB = (1 << DDB3); PORTB |= (1 << PORTB3); while (1) { for (i = 0; i < 26500; i++) ; PORTB = ~PORTB & (1 << PORTB3); } }
ところが、こんな単純なコードがrecipe for target 'main.o' failed
と言われてビルドできない。
ここで Output をよく見ると、
'C:\Users\[ユーザー名の一部]' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 make: *** [main.o] Error 1
どうやら内部で make を走らせているようだが、全角スペースの扱いでコケているらしい(もしかしたらスペース以外の全角文字もダメかもしれない)。
原因究明のため、コマンドプロンプトから直接make -d
と叩いてみると、次のようなログを得た。
(略) Must remake target `main.o'. Creating temporary batch file C:\Users\[ユーザー名の一部] ~1\AppData\Local\Temp\make5676-1.bat CreateProcess(C:\Users\[ユーザー名の一部] ~1\AppData\Local\Temp\make5676-1.bat,C:\Users\[ユーザー名の一部] ~1\AppData\Local\Temp\make5676-1.bat,...) Putting child 0x029d3108 (main.o) PID 43895224 on the chain. Live child 0x029d3108 (main.o) PID 43895224 Main thread handle = 0x000000f0 'C:\Users\[ユーザー名の一部]' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 Reaping losing child 0x029d3108 PID 43895224 Cleaning up temp batch file C:\Users\[ユーザー名の一部] ~1\AppData\Local\Temp\make5676-1.bat make: *** [main.o] Error 1 Removing child 0x029d3108 PID 43895224 from chain.
ユーザー環境変数で設定された %TMP% にバッチファイルを生成して実行しているようだが、パスを正しくクオートしていないのだろうか。
要するに、一時ディレクトリのパスに全角文字が含まれているのでビルドできない。
なら解決するのは簡単で、一時ディレクトリの場所を、全角文字を含まないパスに変えてしまえばいい。
私は C:\Temp
に移動した。PCを再起動してもう一度ビルドしてみたところ、無事にBuild succeeded.
追記: クリーンインストールを機に、ユーザー名を半角英数にした。最初からこうしておけばハマることはなかっただろう……