所以我有main.cpp和main2.cpp,每一个里面都有int main。我想从中得到2个exes。创建这样的项目是可能的吗?
kzipqqlq1#
不,VisualStudio的项目模型是严格围绕“一个项目生成一个输出”的假设构建的。如果您需要两个可执行文件,则必须创建两个项目。您可以将它们放在同一个解决方案中,以方便您的操作,但它们必须是单独的项目。
编辑
好的,正如其他人所指出的,如果你很绝望的话,当然可以这样做。你可以添加一个自定义的构建步骤,它可以做任何你喜欢的事情,包括构建另一个可执行文件。(但是,构建系统不会理解这个文件应该被视为项目输出,所以一些场景可能会失败:例如,文件不会自动复制到输出文件夹,并且在重建之前检查依赖关系时,它可能无法了解要检查哪些文件以及要重建哪些文件(或如何重建)。)Visual Studio(至少到2008年,不确定2010年)也允许使用nmake文件,但我认为你在扩展“Visual Studio项目”的定义。但是在“正常”的情况下,一个项目意味着一个输出,为了得到两个可执行文件,你通常会创建两个项目。
jgwigjjp2#
您需要一个包含两个 * 项目 * 的 * 解决方案 *。请阅读有关解决方案和项目的Visual Studio文档。
8ljdwjyq3#
这是我的解决方案,因为在谷歌搜索中似乎没有人建议这种方法。它相当简单,我已经使用/看到它在其他IDE中使用(如Code::Blocks)。在项目中,为所需的每个输出创建一个配置。然后,在每个配置中仅包括一个main源文件。在VS中,这意味着对于每个具有main的源文件:右键单击-〉Properties -〉Excluded From Build = Yes。因此,一旦您完成,每个配置只会生成一个main源代码。然后您可以在Project Properties中为每个配置指定不同的输出。我在VS 2010上完成了此操作,但它可能适用于其他版本。我使用这种方法是为了让一个项目有多个测试,而不会因为测试项目比实际的代码项目多而使解决方案混乱。
main
sshcrbum4#
我不知道这是否可以做到,但唯一的变化是你有,要做到这一点,是与自定义构建步骤。编辑:因为有人否决了这个,我做了一个测试,使一个虚拟配置。在自定义构建步骤中,两个Link-cmd(从原始link-cmdline复制并进行了一些修改)将main1.obj和main2.obj作为输入,并输出App1.exe和App2.exe。它在编译之后和链接之前执行。真他妈的管用!缺点是我还不能阻止原始exe的链接(在重复的主函数上会出错)。解决这个问题的方法是有一个库项目,从构建中排除带有main()的源代码,并在自定义步骤中构建它们。所以这个问题的答案应该是:"是的,这是可以做到的"
main()
m528fe3b5#
在一个Visual Studio项目中不能有多个main()函数。因此不能编译2个可执行文件,唯一的方法是在同一个解决方案中创建两个不同的项目
u3r8eeie6#
您可以创建一个包含两个项目的解决方案,每个项目对应一个所需的输出。然后转到“生成”菜单,选择“批生成..”,并选择这两个项目。如果希望这两个exe文件位于一个位置,则可以指定自定义的生成后操作:对于两个项目:检视项目属性页,并在[建置事件]中选取[建置后事件],然后在[命令列]字段中输入会将输出复制到所需位置的命令,例如:copy $(TargetPath)c:\yourlocation /Y则在生成解决方案后,输出文件将被复制到该位置。
yjghlzjz7#
另一个选择是使用条件编译,类似于
main() { #ifdef VERSION1 call_main_logic(); #else call_main2_logic(); #endif }
然后在项目中定义不同的配置。对于每个配置,您都需要相应地定义预处理程序符号(在项目设置-〉配置属性-〉C/C++ -〉预处理器)。请注意,一次只能创建一个可执行文件,但通过切换配置,您将得到一个执行您当前想要的操作的可执行文件......这可能适合您的需要,也可能不适合,具体取决于您所处的具体情况。
**编辑:**此外,由于不同的配置会创建其单独的输出文件夹,因此您将同时使用两个Execs作为输出。
7条答案
按热度按时间kzipqqlq1#
不,VisualStudio的项目模型是严格围绕“一个项目生成一个输出”的假设构建的。
如果您需要两个可执行文件,则必须创建两个项目。您可以将它们放在同一个解决方案中,以方便您的操作,但它们必须是单独的项目。
编辑
好的,正如其他人所指出的,如果你很绝望的话,当然可以这样做。你可以添加一个自定义的构建步骤,它可以做任何你喜欢的事情,包括构建另一个可执行文件。(但是,构建系统不会理解这个文件应该被视为项目输出,所以一些场景可能会失败:例如,文件不会自动复制到输出文件夹,并且在重建之前检查依赖关系时,它可能无法了解要检查哪些文件以及要重建哪些文件(或如何重建)。)
Visual Studio(至少到2008年,不确定2010年)也允许使用nmake文件,但我认为你在扩展“Visual Studio项目”的定义。
但是在“正常”的情况下,一个项目意味着一个输出,为了得到两个可执行文件,你通常会创建两个项目。
jgwigjjp2#
您需要一个包含两个 * 项目 * 的 * 解决方案 *。请阅读有关解决方案和项目的Visual Studio文档。
8ljdwjyq3#
这是我的解决方案,因为在谷歌搜索中似乎没有人建议这种方法。它相当简单,我已经使用/看到它在其他IDE中使用(如Code::Blocks)。
在项目中,为所需的每个输出创建一个配置。然后,在每个配置中仅包括一个
main
源文件。在VS中,这意味着对于每个具有
main
的源文件:右键单击-〉Properties -〉Excluded From Build = Yes。因此,一旦您完成,每个配置只会生成一个main
源代码。然后您可以在Project Properties中为每个配置指定不同的输出。我在VS 2010上完成了此操作,但它可能适用于其他版本。我使用这种方法是为了让一个项目有多个测试,而不会因为测试项目比实际的代码项目多而使解决方案混乱。
sshcrbum4#
我不知道这是否可以做到,但唯一的变化是你有,要做到这一点,是与自定义构建步骤。
编辑:因为有人否决了这个,我做了一个测试,使一个虚拟配置。
在自定义构建步骤中,两个Link-cmd(从原始link-cmdline复制并进行了一些修改)将main1.obj和main2.obj作为输入,并输出App1.exe和App2.exe。它在编译之后和链接之前执行。
真他妈的管用!
缺点是我还不能阻止原始exe的链接(在重复的主函数上会出错)。解决这个问题的方法是有一个库项目,从构建中排除带有
main()
的源代码,并在自定义步骤中构建它们。所以这个问题的答案应该是:"是的,这是可以做到的"
m528fe3b5#
在一个Visual Studio项目中不能有多个main()函数。因此不能编译2个可执行文件,唯一的方法是在同一个解决方案中创建两个不同的项目
u3r8eeie6#
您可以创建一个包含两个项目的解决方案,每个项目对应一个所需的输出。然后转到“生成”菜单,选择“批生成..”,并选择这两个项目。如果希望这两个exe文件位于一个位置,则可以指定自定义的生成后操作:对于两个项目:检视项目属性页,并在[建置事件]中选取[建置后事件],然后在[命令列]字段中输入会将输出复制到所需位置的命令,例如:copy $(TargetPath)c:\yourlocation /Y则在生成解决方案后,输出文件将被复制到该位置。
yjghlzjz7#
另一个选择是使用条件编译,类似于
然后在项目中定义不同的配置。对于每个配置,您都需要相应地定义预处理程序符号(在项目设置-〉配置属性-〉C/C++ -〉预处理器)。
请注意,一次只能创建一个可执行文件,但通过切换配置,您将得到一个执行您当前想要的操作的可执行文件......这可能适合您的需要,也可能不适合,具体取决于您所处的具体情况。
**编辑:**此外,由于不同的配置会创建其单独的输出文件夹,因此您将同时使用两个Execs作为输出。