当前位置: 首页 > 面试题库 >

VS Code不会使用多个.ccp源文件构建c ++程序

诸葛柏
2023-03-14
问题内容

请注意,我在Ubuntu 17.10上使用VS Code,并使用GCC编译器。

我在构建使用其他.ccp文件的简单程序时遇到了麻烦。我可能在这里缺少明显的东西,因为我对编程还不熟悉,但是我将解释到目前为止的工作。这使我无法继续学习我正在做的教程。

我编写了一个非常简单的程序来说明我的观点,如下所示。

#include <iostream>
#include "Cat.h"

using namespace std;

int main ()
{

speak();

return 0;
}

Cat.h

#pragma once



void speak();

Cat.ccp

#include <iostream>
#include "Cat.h"

using namespace std;

void speak()
{
std::cout << "Meow!!" << std::endl;

}

这个简单的程序在Codeblocks和Visual Studio Community
2017中均内置,没问题,我不知道要使其运行需要做什么。底部的此错误表明根本没有拾取Cat.ccp文件。如果要将定义从此Cat.ccp放到头文件中,则程序可以编译并运行良好,但是我需要利用该.ccp文件,因为我了解这是公认的分离代码的方法。我会注意到所有文件也都在同一文件夹中。

我知道我可能需要告诉VS
Code在哪里寻找Cat.ccp文件,但是对我来说很奇怪,它在同一位置找到了标头。不过,在网上查看后,我一直在阅读,我可能需要在c_cpp_intellisense_properties.json中放置一个目录。这是我的样子。

{
"configurations": [
    {
        "name": "Mac",
        "includePath": [
            "/usr/include",
            "/usr/local/include",
            "${workspaceRoot}"
        ],
        "defines": [],
        "intelliSenseMode": "clang-x64",
        "browse": {
            "path": [
                "/usr/include",
                "/usr/local/include",
                "${workspaceRoot}"
            ],
            "limitSymbolsToIncludedHeaders": true,
            "databaseFilename": ""
        },
        "macFrameworkPath": [
            "/System/Library/Frameworks",
            "/Library/Frameworks"
        ]
    },
    {
        "name": "Linux",
        "includePath": [
            "/usr/include/c++/7",
            "/usr/include/x86_64-linux-gnu/c++/7",
            "/usr/include/c++/7/backward",
            "/usr/lib/gcc/x86_64-linux-gnu/7/include",
            "/usr/local/include",
            "/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed",
            "/usr/include/x86_64-linux-gnu",
            "/usr/include",
            "/home/danny/Documents/C++_Projects/24_-_Classes/Cat.cpp",
            "${workspaceRoot}",
            "/home/danny/Documents/C++_Projects/24_-_Classes/",
            "/home/danny/Documents/C++_Projects/24_-_Classes/.vscode",
            "/home/danny/Documents/C++_Projects/24_-_Classes/.vscode/Cat.cpp"
        ],
        "defines": [],
        "intelliSenseMode": "clang-x64",
        "browse": {
            "path": [
                "/usr/include/c++/7",
                "/usr/include/x86_64-linux-gnu/c++/7",
                "/usr/include/c++/7/backward",
                "/usr/lib/gcc/x86_64-linux-gnu/7/include",
                "/usr/local/include",
                "/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed",
                "/usr/include/x86_64-linux-gnu",
                "/usr/include",
                "${workspaceRoot}",
                "/home/danny/Documents/C++_Projects/24_-_Classes/",
                "/home/danny/Documents/C++_Projects/24_-_Classes/.vscode/Cat.cpp"
            ],
            "limitSymbolsToIncludedHeaders": true,
            "databaseFilename": ""
        }
    },
    {
        "name": "Win32",
        "includePath": [
            "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include",
            "${workspaceRoot}"
        ],
        "defines": [
            "_DEBUG",
            "UNICODE"
        ],
        "intelliSenseMode": "msvc-x64",
        "browse": {
            "path": [
                "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include/*",
                "${workspaceRoot}"
            ],
            "limitSymbolsToIncludedHeaders": true,
            "databaseFilename": ""
        }
    }
],
"version": 3
}

有一次,我在想,如果我需要在里面加上一个双指令告诉编译器建立在两个.ccp文件 tasks.json
但我没有设法弄清楚如何做到这一点,或者即使这是正确的方法。

task.json

{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
    {
        "label": "Build",
        "type": "shell",
        "command": "g++ -g /home/danny/Documents/C++_Projects/24_-_Classes/main.cpp -o Classes",
        "group": {
            "kind": "build",
            "isDefault": true
        },
        "problemMatcher":"$gcc"
    }
]
}

感谢任何帮助。而且,以防万一您想知道,我之所以不只是在Codeblocks或VSCommunity中完成本教程,是因为我想知道大多数情况下发生了什么。另外,我想让VS Code为我工作,因为到目前为止效果很好。


问题答案:

如果您有多个文件,而一个文件依赖cpp另一个文件,则需要告诉g++也对其进行编译,以便链接程序可以找到它。最简单的方法是:

$ g++ Cat.cpp main.cpp -o Classes

附带说明一下,您可能应该最小程度地-Wall,可能-Wextra和可能地使用警告进行编译-Wpedantic,以使您知道自己正在做的事情是否有问题。



 类似资料:
  • 我有如下内容:3个lib(libA,libB,libC),libB和libC依赖于libA。 一旦libA使用make完成构建,是否还有并行构建libB和libC的方法?

  • 请注意:在泽维尔的回答之后编辑的回答 我试图在Android Studio中为一个相同的应用程序项目使用不同的构建风格。然而,我似乎有一个可怕的时间配置它适当地工作。 步骤: null **我检查了分级设置,显然使用自动导入已经启用。尽管如此,对build.gradle文件进行更改不会自动更新构建变体。注意:我还尝试使用Build-Rebuild项目和/或Build-Make项目。我仍然必须关闭项

  • 在VsCode中,如果我创建/删除/更改文件,文件资源管理器不会相应地更新。直到几周前,它还工作得很好,但突然它停止了,只有在我手动点击刷新按钮时才会更新。为了更好地解释这个问题,我在youtube上上传了一段20秒的视频。 这是我的VsCode版本信息: 我在macoS Big Sur 11.4(20F71)上,VsCode在我的git根存储库中打开。 任何帮助都很感激!!

  • 问题内容: 我正在尝试为Linux动态库(.so文件)创建一个hello world项目。所以我有一个文件hello.c: 如何在命令行中使用gcc 创建导出的.so文件? 问题答案: 要生成共享库,您首先需要使用(位置无关代码)标志编译C代码。 这将生成一个目标文件(.o),现在您将其创建并创建.so文件: 编辑 :来自评论的建议: 您可以使用

  • 我试图使用一个jar生成一个包含clojure jar文件和java类文件的jar文件:创建一个jar文件,用于从java/clojure执行 按照指令,我可以使用生成目录。按照指示,我替换了java源代码,并添加了ThingOne-1.0.0-SNAPSHOT-standalone.jar 运行,它构建jar文件时没有出现错误,但是当我尝试执行jar文件时,收到了错误消息。 什么可能是错的?

  • 我在根目录中有2个文件 1-设置。派克 2-img。巴布亚新几内亚 setup.py代码是: locateOnScreen获取一个位于名为"img"的根文件夹中的参数。PNG"当我直接通过vs代码命令行运行此代码时,它会运行,但当我通过pyInster使用以下命令构建文件时。 或 一个文件setup.py 两个命令都可以将我的文件构建为. exe格式。但是我的函数locateOnScreen不起作