C++のコードをコンパイルするタスクが突然動かなくなってしまい、調べても解決方法がでてこなかったので備忘録です。
状況
昨日まで使っていた下のようなタスクが動かなくなりました。Macを使用してます。
"tasks": [ { "label": "gnu_build", "type": "shell", "command": "/usr/local/bin/g++-9", "args": [ "-std=gnu++1y", "-Wall", "-o", "${fileDirname}/${fileBasenameNoExtension}.exe", "${file}" ], "group": { "kind": "build", "isDefault": true }, "problemMatcher": [ "$gcc" ] } ]
/usr/local/bin/g++-9 -std=gnu++1y -Wall -o "作成される実行ファイルのフルパス" "コンパイルしたいファイルのフルパス"
をシェルで実行するタスク。
テスト用のスクリプトtest.cppはこの通り。
#include <iostream> int main() { std::cout << "Hello" << std::endl; return 0; }
タスクをVSCode上で実行すると、エラーメッセージ
collect2: fatal error: cannot find 'ld' compilation terminated. The terminal process terminated with exit code: 1
/usr/local/bin/g++-9 -std=gnu++1y -Wall -o "作成される実行ファイルのフルパス" "コンパイルしたいファイルのフルパス"
をターミナルを開いて実行するとコンパイルできた。
ターミナルで次のように実行。
$ which ld /usr/bin/ld
VSCodeでのパスが問題っぽい。
Code->Preferences->Settingsをひらく。Userのタブからsetting.jsonを適当なところから開く(デフォルトのままなら多分~/Library/Application Support/Code/User/settings.json
になるはず)。
"terminal.integrated.inheritEnv": false
となっていた。デフォルトはtrueなので、設定をうっかり変えてしまっていたらしい。ここをtrueにしたらコンパイルできるようになった。
ちなみにこの設定項目についての説明は
Whether new shells should inherit their environment from VS Code. This is not supported on Windows
となっている。これだけだとよくわからないが、下のリンクで説明してくれている。
日本語メモ:June 2019 (version 1.36) / Visual Studio Code Updates - やまだのブログ