【问题标题】:Multiple main CPP files in VisualStudio?Visual Studio 中的多个主要 CPP 文件?
【发布时间】:2013-06-06 00:42:32
【问题描述】:

我有一些软件的示例目录,其中包含具有多个main 函数的多个文件。我可以将所有这些文件组装到单个项目中,编译它们然后运行特定的文件而不会出现main already defined 错误吗?假设我不想为每个 cpp 文件创建单独的项目。

更新

我需要简单的一键式解决方案(如果存在)。我不想在文件夹之间分发文件或重构文件内容。例如,在 Eclipse/Java 中,您可以使用 main 右键单击​​任何文件并运行它。一个项目中可以有许多主要文件。这对 VisualStudio/CPP 可行吗?

更新 2

我知道 C++ 不是 Java,Visual Studio 也不是 Eclipse。我的问题是关于一些手动操作的自动化。

【问题讨论】:

  • 您是要弹出一个程序来作为所有其他“主要”功能的网关,还是每个main 一个程序?
  • VisualStudio 可以是这个单一的程序。它可以将每个包含 main 的文件编译成单独的 EXE,并通过右键单击源 CPP 来运行它(例如)。
  • C++ 不是 Java :) 解决方案中可以有多个 项目,但不能简单地运行一个 cpp 文件。
  • 我并没有询问执行编译和链接的程序。我在问您是否希望最终结果是单个可执行文件或多个可执行文件。无论如何,您似乎需要多个 EXE。
  • 阅读我编辑的答案。

标签: c++ visual-studio main


【解决方案1】:

将这些main 函数放在单独的命名空间中,然后定义您要运行哪一个,例如。

File1.cpp

namespace F1
{
    int main(int argc, char * argv[])
    {
        // ...
    }
}

The-real-main.cpp

int main(int argc, char * argv[])
{
    if (whatever)
        return F1::main(argc, argv);
}

编辑:响应附加信息。

C++ 不是 Java,VS 也不是 Eclipse :) 在 VS 中一次维护多个程序的自然方法是将多个项目(一个用于每个可执行文件或库)放在一个解决方案中。如果要运行项目,只需在Solution Explorer中右键单击,选择Set as Startup Project,然后单击Start按钮即可运行。

要将项目添加到解决方案,请右键单击解决方案并选择Add | New project...Add | Existing project.

【讨论】:

  • 是否可以一键将多个CCP的文件夹转换为多个项目的解决方案?
  • 转换 - 在实践中,不是。您可以使用多个项目准备整个解决方案,然后一键运行它们(实际上是两次)。
  • 还有一个选项可以修改 CPP 的参数(在属性窗口中),这样一次只会编译其中一个(包含在项目或文件类型中)。但请注意,这是一个快速而肮脏的解决方案。首选包括设置一系列项目并以这种方式管理它们。
  • 您可能需要查看以下链接:opentissue.org/mediawiki/index.php/Using_CMake
  • 其实F1命名空间在The-real-main.cpp文件中是不会被自动识别的。我必须为File1.cpp#include 创建一个头文件,否则我会收到namespace with that name does not exist 错误。你能详细说明@Spook吗?
【解决方案2】:

在 Visual Studio 中:

创建一个“解决方案” - 在解决方案下可以创建多个“项目”。每个项目将单独编译成可执行文件。除了“卸载”不需要的项目之外,编译正常进行。要重新打开其他项目之一,只需从解决方案资源管理器中选择“重新加载项目”。

此功能对于研究/组织目的很有用,其中将源文件分组在一个公共“文件夹”中以便于搜索和访问,同时仍然单独编译/调试。据我所知,主要优势是可以使用解决方案资源管理器轻松浏览项目。

【讨论】:

    【解决方案3】:

    我没有使用过 OpenCV,但它使用 cmake,并且在示例目录中有一个 CMakeLists.txt。有一些关于使用 cmake here 构建示例的讨论。

    Cmake 本身不构建任何东西,它为目标平台生成构建脚本,并且应该能够创建可以加载到 Visual Studio 中的解决方案和项目文件。

    【讨论】:

      【解决方案4】:

      可能最简单的解决方案是使用多个构建配置。只需创建一些构建配置,为每个配置定义一个入口点。

      【讨论】:

        【解决方案5】:

        如果只需要构建一个文件,您可以使用“属性”中的“从构建中排除文件”选项来排除其余文件。选择多个源文件并一次排除它们。显然,如果您跨文件访问函数/符号,则此解决方案不起作用。

        【讨论】:

          【解决方案6】:

          是的,有一个简单的方法可以做到这一点: 右键单击这些包含主要功能并且您不想在解决方案资源管理器窗口中运行的源文件,然后转到属性->配置->常规->从构建中排除,选择是。 因此,当您构建和运行项目时,这些源文件不会编译和运行。当您想运行另一个源文件时,只需包含它并排除其他源文件。

          【讨论】:

            【解决方案7】:

            在 Visual Studio 中,您必须为每个要创建的可执行文件创建一个项目。

            【讨论】:

            • 我可以自动创建这些项目吗?
            • 警钟在我脑海中响起。为什么有这么多 EXE 需要自动化流程?
            • 我有一个库(这是 OpenCV),它有一个示例目录。无论如何,在许多 cpp 开源库中将多个 cpp 示例文件放在一个目录中是正常的。我只想快速编译它们。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-08-18
            • 1970-01-01
            • 1970-01-01
            • 2020-08-23
            • 2020-09-04
            • 2019-01-14
            相关资源
            最近更新 更多