运行时确定编译选项

Mic*_*ick 3 c++ visual-studio-2008

我需要能够在运行时确定用于构建可执行文件的编译选项.有没有办法做到这一点?

编辑:我对检测优化设置特别感兴趣.原因是我正在编写必须尽可能快地运行的商业软件.虽然我只是在修改和测试系统,但我没有做所有的优化,因为它需要太长时间.但我担心我可能不小心去发布一个未经优化的程序版本.我想做的是让程序在启动时给我一个视觉警告,说"这是慢速版本 - 不要发布".

编辑:也许我可以写一些小实用程序作为预构建步骤运行?命令行是否存储在某个文件中?如果它然后我可以提取它,然后将它写为一些包含文件作为字符串,嘿presto!

编辑:我的选择不是在调试和发布之间.调试太慢了 - 我严格保留调试.我的日常选择是在优化和超优化之间(包括慢编译链接时间编译,甚至是配置文件引导优化).

编辑:我经常更改复杂的编译过程,不同的库,不同的预定义宏,不同的源文件等.维护多个几乎相同的项目文件似乎很笨拙,只有几个优化标志不同.我更喜欢只在需要时在一个项目中切换几个标志并重新编译.我只是想让可执行文件自我测试它是如何创建的.

编辑: IIRC有一些方法可以要求visual studio创建一个makefile.我可以要求visual studio为我创建这个makefile作为预构建步骤吗?

T.E*_*.D. 6

我所知道的将构建系统中的信息传递给正在运行的程序的最佳方法是通过预处理器.您可以在命令行上传递预处理程序定义,并在内部使用它们来设置变量的值,选择代码或使用#ifdefs的任何内容.

因此,设置构建系统以使用类似DEBUG_SET的东西来调试其调试版本等.


解决第二个"编辑"问题,是预建和后期工具的命令行放在项目的vcproj文件中.它是一个XML文件,您应该在标签Configurations-> Tool下找到它,其名称属性类似于"VCPreBuildEventTool".尝试使用GUI添加一个,然后在文本编辑器中打开文件,您应该看到.

在这里创建处理vcproj文件的工具是相当普遍的.我想知道我们是否可以使用评论中提到的那些属性表而不是......

  • 要扩展TED的答案,您还可以使用属性表(http://msdn.microsoft.com/en-us/library/a4xbdz1e%28VS.80%29.aspx)来更轻松地管理各种编译器标志.我有一个"Release.settings"文件,我附加到所有`Release`配置和一个"Debug.settings",我附加到`Debug`以及大量其他属性表的各种事物("服务器")表详细说明服务器的所有标志,例如不打扰运行任何GUI事物). (3认同)