VS2017打开文件夹 - 配置'编译C' tasks.vs.json中的上下文?

时间:2018-06-17 02:58:46

标签: c visual-studio

使用VS 2017,您可以选择File->Open->Open Folder在解决方案资源管理器中打开所有源,而无需创建项目。从理论上讲,这将允许您使用目录中的任何小型单源文件进行编译,调试等,而无需为每个文件设置项目。但是,我还没有找到一种方法来向 Solution Explorer 上下文菜单添加一个有效的'Compile'选项,该菜单将调用编译器来构建单个文件。

Microsoft提供了几个旨在解释该过程的参考页面:

在问题VS2017 'Open Folder'-project fails to generate CMake cache中已经切及了这一点,尽管仅限于cmake并最终成为提问者试图遵循CMake support in Visual Studio的错字

我遇到的问题是当我向tasks.vs.json添加任务来编译目录中的C文件时,VS会在消息窗口中响应{{1}的错误}。我尝试使用的cl cannot be found as an internal or external command任务是:

tasks.vs.json

{ "version": "0.2.1", "tasks": [ { "taskName": "Echo filename", "appliesTo": "*.c", "type": "command", "command": "${env.COMSPEC}", "args": ["cl /nologo /W3 /wd4996 /Ox /Foobj/ /Febin/${fileBasename} /Tc ${file}"] }, { ... (normal default entries for launch...) } ] } msvc_x86继承环境,适用于" Debug"和"发布"默认情况下在msvc-x64内的目录中正确创建。

我试图通过CppProperties.json为VS命令提示符创建一个外部工具,并使用Tools->External Tools... Add启动cmd.exe(这会打开所需的开发人员命令行),但是没有提供一个外部命令,传递编译字符串以从Solutions Explorer列表中编译源文件。

我只想使用以下命令行在Solution Explorer列表中选择的文件上调用/k "C:\Program Files (x86)\Microsoft Visual Studio 17.0\Common7\Tools\VsDevCmd.bat"编译器:

cl.exe

我可能正在阅读文档错误,但是如何在cl /nologo /W3 /wd4996 /Ox /Foobj/ /Febin/${fileBasename} /Tc ${file} (或其他地方)中创建一个任务条目,它将提供一个简单的上下文菜单条目,以允许编译以{{1}打开的C源代码}}?

1 个答案:

答案 0 :(得分:1)

根据Customize build and debug tasks for "Open Folder" development,这有效。

{
  "version": "0.2.1",
  "tasks": [
    {
        "taskName": "cl-task",
        "appliesTo": "*.c",
        "type": "command",
        "command": "cl",
        "args": [ "${file}" ],
        "envVars": {
            "VSCMD_START_DIR": "\"${workspaceRoot}\""
        }
    }
  ]
}

CppProperties.json提供有关浏览的信息,即IntelliSense行为。

要指定环境变量,请改用envVars。您可以在根文件夹中创建文件VSWorkspaceSettings.json并添加

{
    "envVars": { "PATH": "%PATH%;C:\\Users\\zhaofeng-shu33\\Anaconda3\\Scripts" }
}

然后以下任务将起作用。它只是为程序conda输出帮助消息,该程序是位于文件夹Scripts内的可执行文件,不会添加到全局环境变量中。

{
    "taskName": "conda-task",
    "appliesTo": "*.c",
    "type": "command",
    "command": "${env.COMSPEC}",
    "args": [ "conda --help" ]
}