由于C ++ 11中包含range-for,因此我们正在迁移Qt代码,因此它不再使用Q_FOREACH
/ foreach
宏。为了强制迁移,我们将QT_NO_FOREACH
预处理程序定义手动添加到我们检查的每个项目中。我们使用Visual Studio和Qt VS Tools加载项。
我的问题是:有什么方法可以将这样的宏自动添加到新的Qt项目中?我已经检查了Qt VS Tools的全局设置,那里什么也没有。可能是加载项中的一些隐藏变量我们可以更改吗?
很显然,我们可以手动添加它们,但是我们希望有一些一次性解决方案。我们还考虑了属性页的使用,但是它们要么基于用户(不是存储库的一部分,并且将适用于所有项目,不仅是Qt),或者必须手动包含在项目中(在这种情况下)只需在项目设置中手动添加定义会更容易。
注意:我们知道将表格Q_FOREACH
迁移到范围内的含义,以及如何正确进行更改以避免COW处罚。如果您想了解更多信息,请检查here,here和here。
答案 0 :(得分:0)
看看Qt VS Tools的源代码,可以看到预处理器定义是从位于qmake.conf
的{{1}}文件的内容中添加的,其中包括{{ 1}}。
只需将<QTDIR>\mkspecs\win32-msvc
定义添加到这些文件中的任何一个,使用该版本的Qt的所有新项目现在都将删除对<QTDIR>\mkspecs\common\msvc-desktop.conf
的支持。我更喜欢将它添加到QT_NO_FOREACH
中,因为所有VS项目都使用它。
Q_FOREACH
注意:添加定义后,请使用新的VS实例,因为该插件会缓存common\msvc-desktop.conf
文件的内容。
如果好奇的话,在Qt VS Tools中添加这些定义的确切位置是在DEFINES += QT_NO_FOREACH
方法中,文件``\ src \ qtprojectlib \ QtProject.cs`:
qmake.conf
关于这个问题,我的第一个想法是修改Qt的模板,但它有两个缺点:随插件的每个新版本更新模板,更重要的是,如上面的代码所示,在项目的初始配置期间,所有预处理器定义都会被覆盖。