30

我正在从一本书中学习 C++ 并使用 Visual Studio 2012。为了遵循本书的练习,我需要制作多个 .cpp 文件,其中包含 main() 函数。有什么方法可以编译/调试我的程序而无需每次都创建一个新项目?

例如,如果我写一个简单的“Hello, World!” 文件然后决定制作其他非常简单的东西,我可以避免为每个简单程序制作一个新项目吗?有没有办法将 Visual Studio 2012 用作编译器?如果我可以将所有内容都放在一个项目中,我可以在其中编译我想要的任何单个文件并查看它运行,我会喜欢它。

谢谢你的帮助。

4

7 回答 7

19

尽管添加此答案为时已晚,但它可能对未来的观众有用。这就是我所做的 -

在试图弄清楚如何将 Visual Studio 用于您提出的相同目的时,我观察并发现对于 C++ 项目,应该只有一个起点,即只有一个main()函数。

因此,不必每次都创建一个新项目,只需main()将未使用的 C++ 文件中的 () 函数名称更改为其他名称,例如文件名或其他名称。


例如,我首先hello_world.cpp用一个main()函数创建了我的第一个程序,然后编译、运行它并学习了我可以使用它的所有内容。

但是现在我想创建一个新文件来尝试其他一些新事物(一个learn_operators.cpp具有main()自己功能的新文件)。

因此,在尝试 compile & run 之前learn_operators.cpp,我会将main()in的名称更改为hello_world.cpphello_world()然后以与以前相同的方式构建并运行项目,但这次只有这个新文件将运行,因为这是 ( new) 项目的起点(即,它包括main()功能)。

如果我在任何地方错了,希望这能帮助并纠正我。


更新:另一种方法是使用 保留一个文件main(),为其他项目代码创建类,包括添加到项目中的任何新文件/代码,然后从main(). 这样,除了main()保留在类中的任何代码片段,main()每次必须调用新代码时,只有其中的代码会发生一些变化,而不是将函数重命名为main().

于 2015-05-20T11:33:04.147 回答
10

要编译只需制作一个 cpp 文件。并使用cl命令行工具,检查MSDN 链接:Compile a Native C++ Program from the Command Line它有一个示例cl /EHsc simple.cpp

于 2013-05-18T16:31:26.200 回答
8
  1. 右键单击文件。
  2. 转到您不想运行的特定文件的属性。
  3. 在配置属性中,转到常规。
  4. 将“从构建中排除”设置为“是”。
  5. 单击应用。
  6. 然后加载 Windows 调试器。

你准备好了!

于 2015-04-22T00:46:22.363 回答
7

你也可以使用条件编译来解决这个问题。但我真的建议您努力为每个程序创建一个新项目。

头文件.h

#include<iostream>
#define __HelloWorld__

你好世界.cpp

#include"header.h"

#ifdef __HelloWorld__

int main() {
    std::cout << "Hello World" << std::endl;
}

#endif

程序2.cpp

#include"header.h"

#ifdef __program2__

int main() {
    std::cout << "Program 2" << std::endl;
}

#endif

现在您可以通过#define要运行的程序进行选择。

于 2013-05-18T16:52:08.953 回答
5

您可以将所有 cpp 文件添加到具有不同文件名的同一项目中,然后您可以右键单击每个文件并排除您不想构建的文件。

不过,每个应用程序都有一个项目要好得多。

或者,您可以拥有一个主文件,该文件在您实施练习的其他文件中调用您的其他函数,然后您不必处理任何事情,只需在新文件中实施新练习并从 main 调用它。

于 2013-05-18T16:35:09.180 回答
0

如果您在右窗格的项目浏览器窗口中右键单击解决方案名称,您应该能够在现有项目下添加项目。但是,最好为每个练习开始一个新项目。这里有一个参考给你。

于 2013-05-18T16:32:51.580 回答
0

我只能找到 Visual Studio 2019 的解决方案,因此它可能无法在 VS 2012 中运行。您可以转到解决方案资源管理器,删除所有其他文件(只是删除,而不是删除),然后添加新文件。然后你就可以编译它了。

于 2021-05-27T12:18:02.023 回答