質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.58%

VSCodeから直接コンパイルしたい

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 16K+

opyon

score 991

解決!

回答頂いたコード3つの作成と、コードに合わせたファイル配置にすると正常動作確認出来ました。
原因はサブフォルダ配下にファイルがあったので想定通りの動作をしていなかったということだと思います。
イメージ説明

追記3

少しエラーが減りました。解決では無かったです^^;
イメージ説明

追記2

コメントからの修正後の結果も変わらずでした。
イメージ説明

追記1

@lunateaさんの回答にあるコードをそのまま作ってみてタスクの実行してもコンパイル出来ませんでした。
何が問題なのでしょうか?
イメージ説明

一部文字色がグレーになっているのは何か関係がありますか?
イメージ説明

MinGWにgdcがインストールされてるかは知りませんので、
miDebuggerPathのパスは仮です。

確認したところ、c:\MinGW\gdb.exeはありました。
イメージ説明

※VSCodeのタグが無いのでCとVisualStudioにしています。(修正済)

知りたいこと

今日勉強を始めようとしてインストールしたばかりなのですが、VSCodeから直接コンパイルしようと試したところエラーが出てしまいます。
解決策やヒントなどご教示頂けると助かります。

現状までの経緯と出ているエラー

VSCode+MinGWでC/C++のプログラミング環境

tasks.json

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "command": "gcc",
    "isShellCommand": true,
    "args": ["${fileBasename}", "-o", "${fileBasenameNoExtension}"],
    "showOutput": "always"
}


VSCodeから直接コンパイル出来るらしいとのことで調べて試してみました。

タスクの構成が終わったところで、改めてhello.cをアクティブにして、[Ctrl]+[Shift]+[B]を押すと、出力ウィンドウには何も出ませんが、「hello.exe」が出力されます。

ここまでの設定などしてコンパイルを試すと次の画像のようにエラーとなりコンパイルされませんでした。

イメージ説明

試したこと

1.コマンドプロンプトでファイルのあるフォルダにカレントディレクトリを移動してgcc hello.c -o hello.exeを実行すると正常にコンパイル出来ました。
イメージ説明

2.環境変数にpathを通してもコンパイル出来ませんでした。
イメージ説明

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • lunatea

    2018/10/16 21:44

    VSCodeのタグは`Visual Studio Code`です。

    キャンセル

  • opyon

    2018/10/16 21:46

    ありがとうございます。修正しました。回答も拝見させていただきます。

    キャンセル

回答 2

checkベストアンサー

+1

既に自己解決済みですが…。

Code Runnerは使い捨てのソースコードをコンパイルして実行するならばお手軽ですが、エラー行の捕捉をしたり複数のソースコードやライブラリからなるプログラムのコンパイルには不向きです。

// task.json
{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "process",
            "label": "Debug Build",
            "command": "gcc",
            "args": [
                "-g",
                "-O0",
                "${fileBasename}",
                "-o${fileBasenameNoExtension}.exe"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": "$gcc"
        }
    ]
}

ヘッダーファイルの場所を特定し、
定義を移動や定義をここに表示等の機能に必要な設定です。

// c_cpp_properties.json
{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE"
            ],
            "compilerPath": "c:/mingw/bin/gcc.exe",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "gcc-x64",
            "browse": {
                "path": [
                    "${workspaceFolder}"
                ],
                "limitSymbolsToIncludedHeaders": true
            }
        }
    ],
    "version": 4
}

デバッガを使用する場合。
MinGWにgdcがインストールされてるかは知りませんので、
miDebuggerPathのパスは仮です。

launch.jsonのpreLaunchTaskをtask.jsonのlabelと同じにすると
デバッグ時に指定したlabelの処理(Debug Build)を行うようになります。

// launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C/C++: (gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "miDebuggerPath": "c:/mingw/bin/gdb.exe",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "Debug Build"
        }
    ]
}

追記

フォルダ構成はこうですね

フォルダ
ワークスペース

> Executing task: C:\MinGW\bin\gcc.exe -g -O0 hello.c hello.exe
                              ↑ココ

あと-o${fileBasenameNoExtension}.exeはくっつけて-o${fileBasenameNoExtension}.exe
-oが抜けて-o${fileBasenameNoExtension}.exeだけになってますね。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/16 22:59

    今度こそいけました!
    taskをもとに戻したらいけました。
    "${fileBasename}",
    "-o${fileBasenameNoExtension}.exe"

    キャンセル

  • 2018/10/16 23:05

    お手数おかけしました。
    おかげさまで解決できました。
    ありがとうございました。

    キャンセル

  • 2018/10/16 23:06

    追伸:
    HelloWorldをコンパイルするのに丸半日以上掛かりました^^;
    C言語大変そう・・・

    キャンセル

+1

Code Runner

別の方法になりましたが、こちらをインストールしてコンパイルと実行が同時に可能になりました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.58%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る