提问者:小点点

VS代码不会生成具有多个。ccp源文件的C++程序


注意,我使用的是Ubuntu17.10上的VS代码,使用的是GCC编译器。

我在构建一个使用额外的。ccp文件的简单程序时遇到了麻烦。 我可能遗漏了一些显而易见的东西,因为我对编程还很陌生,但我将解释一下我到目前为止所做的工作。 这是一个阻止我继续我正在做的教程的东西。

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

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

using namespace std;

int main ()
{

speak();

return 0;
}
#pragma once



void speak();
#include <iostream>
#include "Cat.h"

using namespace std;

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

}

这个简单的程序内置了代码块和Visual Studio Community 2017没问题,我不知道我需要做什么才能让它运行。 底部的这个错误表明根本没有拾取cat.ccp文件。 如果我要将这个cat.ccp的定义放到头文件中,程序会很好地编译和运行,但是我需要使用这个。ccp文件,因为我知道这是一种公认的分离代码的方式。 我会注意到所有的文件也在同一个文件夹中。

我知道我可能需要告诉VS代码在哪里查找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
}

有一次,我想知道是否需要在其中添加一个double命令来告诉编译器在tasks.json中构建两个。ccp文件,但我还没有设法弄清楚如何做到这一点,或者说这是否是正确的方法。

{
// 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或VS Community中完成教程,是因为我想知道大多数事情的背后都发生了什么。 另外,我想让VS代码为我工作,因为到目前为止它已经很棒了。


共3个答案

匿名用户

如果您有多个文件,其中一个文件依赖于cpp文件,那么您需要告诉g++也要编译它,这样链接器才能找到它。 最简单的方法是:

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

作为附带说明,您可能应该使用警告进行编译,最小的是-wall,可能的是-wextrac,可能的是-wpedantic,这样您就知道您正在做的事情是否有问题。

匿名用户

在tasks.json中:

        "label": "g++.exe build active file",
        "args": [
            "-g",
            "${fileDirname}\\**.cpp",
            //"${fileDirname}\\**.h",
            "-o",
            "${fileDirname}\\${fileBasenameNoExtension}.exe",
        ],

在launch.json中:

"preLaunchTask": "g++.exe build active file"

如果你的资料来源在分开的资料夹中,它会起作用

匿名用户

"tasks": [
    {
        "label": "echo",
        "type": "shell",
        "command": "g++",
        "args":[
            "-g","main.cpp","cat.cpp"
        ],
        "group": {
            "kind": "build",
            "isDefault": true
        }
    }

只需在args中添加cat.cpp,然后尝试运行。 它应该在VS代码上正常运行

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(代码|生成|多个|ccp|源文件|c++|程序)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?