问题标签 [conditional-compilation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
13638 浏览

c++ - 使用“#ifdef”时,Visual Studio 错误地标记了非活动代码块

我的项目有一堆#ifdefs. 这些#ifdefs 使用的宏通常通过命令行使用'/D'选项来获取不同的构建配置。Visual Studio 错误地假定这些宏未定义,并将这些#ifdefs 中存在的代码块灰显。问题不在于语法突出显示 - 我可以将灰色代码从选项转换为彩色代码;主要问题是我无法访问其中存在的任何函数的函数定义#ifdef。我尝试阅读有关 Visual Studio提示文件的信息,但这对我不起作用。

谁能帮我解决这个问题?我正在使用 Visual Studio 2008。

0 投票
2 回答
212 浏览

java - 如何在编译/运行时有条件地删除我的应用程序的一部分?

我有一个在嵌入式设备上运行的 Java 应用程序。因为不同的设备运行不同版本的设备 SDK,我必须针对大约 5 种不同的设备 SDK 组合进行构建。

其中一种组合不支持现有对象的特定方法,并完全从 SDK 中省略了另一个对象。

我在我的程序中使用此方法和对象,但仅在特定配置中使用,因此我想在不支持它的设备上回退到另一种配置。

我很乐意在编译或运行时执行此回退行为。

有条件地删除此代码的最简单方法是什么?

代码在其他方面是相同的,所以我不希望为两个 SDK 创建两个单独的代码分支。

我使用 Ant 脚本构建我的应用程序。

如果相关的话,我的应用程序必须针对一个相当旧版本的 JDK (1.1.8/1.2) 构建。

0 投票
1 回答
409 浏览

c# - XNA - 有条件地包含基于目标平台的对象

我正在为 Windows 和 xbox 构建一个 XNA 4.0 应用程序。

在 Windows 版本中,我有一个调试控制台,它引用 IronPython 和一些紧凑框架中不支持的 CLR/DLR 程序集。我还有一些引用这些项目的部分类。

我知道我可以从 xbox 项目中删除引用以保持兼容性。但是,我还需要删除引用这些项目的类。问题是这些类由需要它们的其他类实例化,但仅适用于 Windows。

这个难题的明显解决方案就是在#if预处理器指令中包装对不受支持的类的调用:

另外,我想我可以以相同的方式包装整个类/部分类以防止它被编译。有一个更好的方法吗?我想避免在代码中添加预处理器指令。

此外,我似乎找不到在解决方案范围内指定条件的方法。

0 投票
3 回答
905 浏览

c# - C# 中的条件编译技术以获得无操作结果

有谁知道用 C# 中的无操作替换某些函数调用的好方法(通过反射或特殊属性)?

基本上,我想做的是这样的

无需在我的代码中随处可见大量 ifdef。我可以用空对象模式替换它(我的 StopWatch 类)并有条件地为其分配空对象,但这与代码中的严格无操作相比仍然不理想。代码路径长度在这里非常重要,当我们不尝试收集时序结果时,我宁愿牺牲一些可读性来完全没有操作。

有谁知道是否有办法在 C# 中标记我的 StopWatch 类或方法,以便在编译器评估时根本不发出代码?

0 投票
2 回答
234 浏览

c# - VS2008:具有定义的多个构建配置无法按预期工作

我有一个基础库来维护多个版本。每当我需要在另一个版本上工作时,我都会进行 SVN 切换。

我的测试应用程序解决方案没有多个版本,所以我认为对于不同的版本,我可以进行多个解决方案/项目配置,为版本定义符号,以便在我的测试中拥有特定于版本的代码。

目前我在测试应用解决方案中有以下构建配置:Debug、Release、DebugV10、ReleaseV10、DebugV15、ReleaseV15。在 *V10 和 *V15 配置中,我为具有特定于版本的测试代码的两个项目创建并选择了相应的 *V10 和 *V15 PROJECT 配置(并非针对所有项目,大多数在解决方案 -Vx 中运行正常的调试/发布配置配置)。

在那些项目配置中,我输入了相应的条件编译符号(VERSION10 和 VERSION15)。

现在在我的项目代码中,我喜欢

但显然 VS 无法识别这些符号。即使是一个简单的#if DEBUG 不再起作用,在所有 Debug* 项目配置中都会检查所有定义的 DEBUG 常量。

这是众所周知的事情吗?我能做些什么呢?

0 投票
2 回答
1955 浏览

qt - 包裹在 ifdef 中的 Qt 信号

我的 Qt 项目链接到一个仅限 linux 的库。当项目在 linux 下运行时,我希望使用该库中定义的类型在事件上触发信号。不过,我遇到的一个复杂问题是该项目还必须在 Windows 中构建。显然,这个信号和捕捉它的槽在 Windows 中是不存在的,这很好。但是,我发现 Qt 的 moc 工具无法识别#ifdef __linux__发出信号的代码周围存在的问题。我的代码如下所示:

[一些文件.h]

[一些文件.cpp]

当我尝试用 g++ 编译它时,我得到了错误: SomeFile.cpp:(.text+0x858c): undefined reference to SomeFile::SomeSignal(SomeTypeDefinedInTheLinuxLibrary)

任何想法如何让 moc 和 #ifdefs 一起玩得很好?

0 投票
1 回答
121 浏览

windows - windows server 2008 和 windows server 2008 R2 之间的条件编译

从 w2k8 开始,R2 中的一些操作系统结构(例如 vds 提供程序)发生了变化。

那么如何有条件地将我的源代码编译为适当的版本呢?还是我需要为 R2 和 w2k8 提供完整的不同项目。

_

如果可能的话,我想要预处理器 ifdef 标志,如 _WIN32_WINNT 和 WINVER。

我想避免使用 SDK 来检测版本。但如果没有标志(根据我的谷歌搜索技能),请建议通过 SDK 查找操作系统版本的方法。

0 投票
1 回答
5925 浏览

cocoa - 在 Xcode 中为 Cocoa 应用程序使用 MACOSX_DEPLOYMENT_TARGET 进行条件编译

在 Cocoa 应用程序中,我想使用条件编译,例如:

我希望这将避免编译器警告有关 removeFileAtPath: 在 MACOSX_DEPLOYMENT_TARGET = 10.6 时被弃用,因为它不应该编译该行。

它不起作用。

当 MACOSX_DEPLOYMENT_TARGET = 10.6 时,我收到警告说 removeFileAtPath: 已弃用。但它不应该编译该行,所以它不应该警告它有一个不推荐使用的方法!

(我在项目构建设置和目标构建设置中都设置了 MACOSX_DEPLOYMENT_TARGET。我将 BASE_SDK 设置为 10.6 并在两者中都指定了 GCC 4.2。)

我究竟做错了什么?我对条件编译有一些基本的误解吗?

0 投票
1 回答
3750 浏览

vb.net - vb.net 中的全局条件定义 (#const) 语句

有没有办法在跨多个源文件访问的 asp/vb.net 应用程序中定义条件定义,即#const?

我想使用,例如,

但是只能在一个地方改变它的价值。

感谢您的任何建议。

0 投票
5 回答
4961 浏览

visual-studio - Visual Studio - 如何避免每次构建都编译所有项目文件?

每次我在 Visual Studio 2010 中构建我的 Visual C++ 解决方案时,整个项目(而不是整个解决方案)都会重新编译。

必须在某处有一个标志或配置才能使 VS 仅编译更改的文件 + 依赖文件。它在哪里?

更新:

  • 我将“Yes (/Gm)”设置为我的项目的配置属性\C/C++\Code Generation\Enable Minimal Rebuild。它仍然在 F7 上编译所有项目的文件。