Visual Studio Code在预期文件夹之外创建可执行文件

时间:2020-10-28 19:26:29

标签: c++ visual-studio-code

我是Visual Studio Code的新手,我才刚刚开始学习使用它来编译C ++项目的基础知识。我遇到了一个问题,当在Vs代码中“打开”文件夹,然后在其中包含我的“ main.cpp”文件的内部文件夹时,编译后在内部文件夹之外创建“ main.exe”,我不希望这种情况发生,并且希望属于该main.cpp的可执行文件位于内部文件夹内部,以便两者都存储在同一个文件夹中,对我而言,它比位于预期文件夹外部更有意义。我真的不知道该去哪里改变这种行为。 这是我的意思的示例: screenshot showing that main.exe is created outside of the innerfolder

更新:将很快发布我自己问题的答案 Update2:对于有此问题的任何人,我都会详细回答

3 个答案:

答案 0 :(得分:0)

我想出了一个简单的解决方案。您只需隐藏扩展名为 .exe 的文件。看到您的回答,很多人会感到困惑,因此您必须按照一些步骤操作。

第 1 步:转到文件

第 2 步:点击偏好-->然后设置

第 3 步:然后搜索“排除文件

第 4 步:选择添加图案

第5步:“**/*.exe”添加这个-->然后点击ok

第 6 步:关闭 Visual Studio 代码,然后再次打开

答案 1 :(得分:0)

如果您使用的是 Code Runner 扩展,则:

  1. 按 Ctrl + Shift + P step1

  2. 删除“>”符号(按退格键删除)

  3. 在 AppData 目录中搜索“settings.json” step3

  4. 然后您可以查看“cpp”行中的“code-runner.executorMap”。您可以输入该参数

    "code-runner.executorMap": {
        "javascript": "node",
        "java": "cd $dir && javac $fileName && java $fileNameWithoutExt",
        "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
        "cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", // <-- This
        "objective-c": "cd $dir && gcc -framework Cocoa $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
        "php": "php",
        "python": "python -u",
        //etc.
    },
    "code-runner.runInTerminal": true,

注意:

实际上第 4 步中的参数是默认设置。因此,如果您是第一次使用它,则不必对其进行编辑。

但是如果您想自定义参数(在大多数情况下用于更改输出目录),这就是您将要使用的地方。

例如就我而言,我想将 .cpp 和 .exe 文件分开到“src”和“bin”文件夹,所以:

"cpp": "cd $dir && g++ $fileName -o ..\\bin\\$fileNameWithoutExt && ..\\bin\\$fileNameWithoutExt",

结果:

PS C:\Coding\C++\src> cd "c:\Coding\C++\src\" ; if ($?) { g++ string.cpp -o ..\bin\string } ; if ($?) { ..\bin\string }
Hi

希望它有效

答案 2 :(得分:-1)

请阅读这是一个可能对工作流程造成影响的完整且非常详细的解释,但视觉工作室尚需修复!我会尽快将其报告

因此,我一直在用这种无意义的问题来梳理我的头发,但最后我得出的结论是Visual Studio有一个非常隐蔽的错误(因为我无法找到任何一个带有错误提示的人。类似的问题/问题),或者文档不清楚。

最初的问题是,如果要在Visual Studio Code中打开一个外部文件夹(在下面提供一个更清晰的示例),而在其中包含main.cpp文件的内部文件夹,Visual Studio Code就不会让步,将main.exe文件放在外部文件夹而不是内部文件夹中,您可以想象为什么如果我在外部文件夹中还有许多其他内部文件夹并且都具有名为{{ 1}}。

让我给你一个我的意思的例子:

假设我具有以下路径(main.cpp已在其中包含代码)-main.exe 现在,我在Visual Studio Code中打开外部文件夹。以下是第一次在Visual Studio Code中打开而没有构建或编译任何东西的样子 After opening outer-folder for the first time in Visual Studio Code 如果我现在尝试使用outer-folder\inner-folder\main.cpp的Visual Studio代码给定的选项来Ctrl + F5进行此操作,则会在屏幕上看到以下内容: After Ctrl + F5 and following options as stated in my explanation 在这种情况下,我在C++ (GDB/LLDB) ---> g++.exe - build and debug active file驱动器中,并且在我的解释开始时所述的示例路径中。错误是说main.exe在内部文件夹中不存在,这是完全正确的,它存在于D:内部。为什么?因为我们需要编辑outer-folder(Visual Studio Code已经误导了信息,所以我倾向于打开tasks.json文件,尽管它们在某种程度上是正确的,因为它说launch.json可以找不到要启动的文件,因此也许您在其中找不到正确的路径,也可以为launch.json)提供另一个选项,该选项位于Visual Studio代码{{1}自动创建的文件夹中}和tasks.json

.vscode文件中,有一个变量(如果您可以调用它,尽管我认为它有不同的名称),在其中[[] )是Visual Studio Code自动传递到终端以编译和构建C ++代码的参数。传入的所有参数的详细信息对于此问题并不重要,但是第二个(launch.json)是指我们正在尝试运行的文件,如tasks.json中所述(请保留打开(args),下一个(${file})只是告诉它以类似的方式输出它,并指定第四个参数的位置。在这里,第四点是非常重要的一点,如果我们回到引用Visual Studio Code提供的变量的链接,https://code.visualstudio.com/docs/editor/variables-reference实际上“应该”的意思与说-o相同。 ..对?没有!是错误的,实际上是在说${fileDirname},这就是在outer-folder\inner-folder之外构建outer-folder的原因,因此我们已经在文档中出现了某种类型的错误信息的危险信号或某种类型的错误。

现在,作为Visual Studio Code在VSC(main.exe上提供的inner-folder的文档),我们可以进行一些更改,以便在不同的位置构建和输出程序,为此,我们需要进入gcc,然后将https://code.visualstudio.com/docs/cpp/config-mingw中的第四个参数更改为tasks.json,现在还没有达到args键,我需要解释为什么将无法正常工作,但是首先让我们尝试一下...按${fileDirname}\\inner-folder\\${fileBasenameNoExtension}.exe,这将生成您的程序,但不会运行该程序(如果您遵循此操作,请确保构建正确的文件而不尝试生成{ {1}}本身,现在,当我们这样做时,可以看到已经建立了另一个Ctrl + F5文件并在正确的位置output is in the correct location中输出。好的,现在有关在Visual Studio Code中配置Ctrl + Shift + B的文档建议,现在您可以通过转到终端并从那里运行文件来运行文件(无需说明如何执行)。有趣的是,如果要调试该怎么办?我们将在这里找到与此相关的另一个潜在错误或非常糟糕的文档。如果我们现在打开tasks.json(这是您按main.exe时运行的文件),然后我们查看变量(同样,我几乎100%确信不是该变量)但是我现在不知道该怎么称呼)mingw在这里您告诉{​​{1}}您要运行的文件的位置在我们这里是{{ 1}}应该位于。由于我们已经解决了launch.json中的问题,并且现在每次可以在正确的位置进行重建时都可以使用Ctrl + F5进行构建,因此现在可以使用program:来运行,对吗?不!这是下一个错误/不良文档的地方!如果您查看文件的最底部,则有一个launch.json,这是存储在main.exetasks.json中的值的名称,它必须完美匹配,以便{ {1}}知道被调用时要运行的任务。问题是,即使它们已经自动匹配(默认情况下它们的名称是相同的),也仍然无法正常工作,Visual Studio Code出于某种原因说,您知道可以解决您的问题。JSON我们将覆盖并使用默认值!!即使您的默认名称与Ctrl + Shift + B上的默认名称匹配,它也不会运行您的Ctrl + F5,它会用默认名称覆盖它(不是100%确定它是做什么的,但这是我的最佳猜测,因为它100%不能运行我们的那个),现在有趣的是,当我们将"preLaunchTask:""label":都更改为相同的东西时,除了默认字符(甚至在任何地方添加一个字符,但还要确保两个字符都匹配)以外的其他任何内容,当我们执行tasks.json时,它现在就运行我们的launch.json!但是……所有这些都是没有用的,因为在一天结束时,我们不得不对launch.json进行硬编码,并且我们必须对要存储在其他内部文件夹中的每个文件执行此操作!您可以通过仅将文件夹(tasks.json而不是"preLaunchTask":打开为主文件夹("label":)来解决此问题,并解决了臂杆问题,但是您看不到整个文件夹如果您的Ctrl + F5已打开,则可以完成该项目。