预处理器定义-生成时提示? 在我的公司,我们有一个大型的C++项目,它具有多种功能,可以通过各种预处理器定义来启用或禁用。

预处理器定义-生成时提示? 在我的公司,我们有一个大型的C++项目,它具有多种功能,可以通过各种预处理器定义来启用或禁用。,c++,visual-studio-2010,c-preprocessor,C++,Visual Studio 2010,C Preprocessor,如果我们在一个项目配置列表中列举每个可能的预处理器/功能组合,我们将拥有一个相当广泛的列表(更不用说长的配置名称了) 是否有插件(或其他未知功能)可以在用户启动构建时显示提示,以便用户可以选中/取消选中可配置功能的列表,以启用或禁用预处理器定义 像这样的东西太棒了: 您可以创建一个简单的应用程序,它将生成一个包含定义的头文件 #ifndef __GEN_CONFIG__ #define __GEN_CONFIG__ #undef LOGGING #define LOGGING 1 // fo

如果我们在一个项目配置列表中列举每个可能的预处理器/功能组合,我们将拥有一个相当广泛的列表(更不用说长的配置名称了)

是否有插件(或其他未知功能)可以在用户启动构建时显示提示,以便用户可以选中/取消选中可配置功能的列表,以启用或禁用预处理器定义

像这样的东西太棒了:


您可以创建一个简单的应用程序,它将生成一个包含定义的头文件

#ifndef __GEN_CONFIG__
#define __GEN_CONFIG__

#undef  LOGGING
#define LOGGING 1 // for example

#undef  FEATURE_A
#define FEATURE_A 0

#endif
然后可以将此标题包含在项目中


应用程序/对话框可以作为一个文件执行,以确保头文件在编译之前立即更新。

我喜欢使用CMake来完成此任务。在
CMakeLists.txt
中,可以使用命令
set(CACHE)
,该命令创建一个变量,并使用给定的文档字符串将其放入CMake缓存中。然后可以使用工具(如
ccmake
)编辑这些值。例如,如果将该值设置为布尔值,则可以打开或关闭功能

在windows上,您可以使用查看和编辑缓存项,这类似于您在问题中发布的对话框


编辑:CMake在创建构建时不会弹出窗口。相反,它会记住缓存中的变量。通常的方法是使用不同的功能创建不同的版本,即一个版本在调试模式下具有所有功能,另一个版本在发布模式下仅具有最小的功能集,依此类推。

您可以查看我的分析工具,该工具生成项目中使用的所有预处理器键的列表


除了构建列表本身,它还对这些参数进行分类。

我熟悉构建前和构建后事件,但我不确定是否可以使用它们修改预处理器定义。如果您可以在预构建步骤中修改预处理器定义,那么可能有一种非常有技巧的方法来手动显示Windows窗体提示并将结果导入预构建步骤。但老实说,我的问题实际上更多的是为了找到一个可能已经存在的可配置插件,以避免所有这些额外的黑客行为。我想,创建一个简单的应用程序没有什么“黑客行为”,它可以生成带有
#define
s的小头文件,然后可以轻松地包含这个头文件。这可能是我尝试过的解决方案,但在我把你的问题标记为正确之前,我会把这个问题再留待一段时间。另一个古老格言的例子是:“如果你想把事情做对…”同样,你介意更新你的答案,以实际包括你在评论中描述的步骤吗?这对于夜间构建来说是很讨厌的。哪位开发者必须熬夜?这是一个正确的观点;它可能只有在项目配置设置为“自定义”或类似设置时才会显示。