标签: conditional-compilation

在C#中有一种简单的方法可以根据操作系统版本获得条件编译符号

我有一堆单元测试需要基于Windows操作系统版本进行条件编译.此单元测试正在测试仅在Windows Vista及更高版本中可用的TxF.

#if WIN_OS_VERSION >= 6.0
// Run unit tests
#endif
Run Code Online (Sandbox Code Playgroud)

c# conditional-compilation

6
推荐指数
1
解决办法
2325
查看次数

VS2010编译器定义

在gcc我正在写,friend class FriendMaker<T>::Type但Visual Studio想要friend FriendMaker<T>::Type.所以我认为是时候去编译特定了.

那么我需要ifdefVisual Studio什么?我目前正在使用2010年,但我可能会改用2012年.

c++ conditional-compilation visual-studio

6
推荐指数
1
解决办法
8698
查看次数

如何在xml格式的resx文件中添加条件编译?

NET项目,我需要根据某些编译符号在资源文件(这是一个xml文件)中添加内容.

类似以下内容:

<xml ....>
<myNodes>

#if SOMECONDITION
<node1>
...
</node1>

#else
<node2>
...
</node2>

#endif
</myNodes>
Run Code Online (Sandbox Code Playgroud)

这甚至可能吗?我知道这不符合XML规则.是否有类似的方法来使用条件编译并且还要遵守XML规则?

conditional-compilation visual-studio-2010 embedded-resource c#-4.0

6
推荐指数
1
解决办法
423
查看次数

即使选择了Debug构建,Qt Creator的intellisense也会使#ifdef _DEBUG块变灰

当我在我的代码中有#ifdef这样的

#ifdef _DEBUG
    printf("This is a debug build");
#endif
Run Code Online (Sandbox Code Playgroud)

printf即使它是一个调试版本,Qt Creator仍会显示灰色,当我运行它时"This is a debug build"会打印出来.

似乎intellisense没有看到预处理器定义将通过命令行(即-D_DEBUG)传递给编译器,而不是在头文件/源文件中定义.

c++ qt conditional-compilation qt-creator

6
推荐指数
1
解决办法
3793
查看次数

参考装配中的条件编译

我正在编写一个包含一些有条件编译成员的程序集,例如:

[Conditional("DEBUG")]
public static void Log(string message) { /*...*/ }
Run Code Online (Sandbox Code Playgroud)

像这样使用它:

public void DoStuff() {
    Log("This will only appear on debug builds");
    /* ... Do stuff ... */
}
Run Code Online (Sandbox Code Playgroud)

但是当我将这个程序集提供给某人在他们的项目中使用时,我希望他们能够定义是否编译了DEBUG条件成员.

如果那是不可能的(例如方法在编译时被完全删除),那么有没有办法打包程序集的多个"配置"(例如,可能使用[AssemblyConfiguration])并根据引用的配置选择它们部件?

另外:我不是在寻找手动设置引用程序集的.csproj文件中的引用的建议; 我知道我可以做到这一点,但这很乏味,必须为每一个参考做.

.net c# assemblies conditional-compilation

6
推荐指数
2
解决办法
1095
查看次数

Rust 条件编译属性覆盖了多少行?

我正在尝试使用条件编译语句。除了定义一个只应存在于调试版本中的函数之外,我想定义一组仅存在于调试版本中的变量/常量/类型。

#[cfg(debug)]
pub type A = B;
pub type B = W;

#[cfg(other_option)]
pub type A = Z;
pub type B = I;
let test = 23i32;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,条件编译属性实际上“覆盖”了多少行?它只有一个(在这种情况下我会期望什么)?有没有办法确保整个代码块(包括变量、类型和两个函数)都被条件覆盖?

conditional-compilation rust

6
推荐指数
2
解决办法
2811
查看次数

Swift 条件编译访问控制

我正在构建一个 iOS 框架,我需要在公共应用程序和一些内部应用程序中使用相同的框架,不同之处在于,在内部应用程序中我需要访问一些我想对公共应用程序隐藏的类和函数,我不想将粘贴代码从框架复制到内部应用程序......

是否可以使用条件编译(或其他一些无需重复代码的解决方案)来执行以下操作:

#if SOMEFLAG
   public
#else
   internal
#endif
   class SomeClass{
       // public when SOMEFLAG otherwise internal
   }
Run Code Online (Sandbox Code Playgroud)

当然,上面的代码不起作用,所以它是我需要的伪代码(它不必与宏一起使用)。

谢谢。

conditional-compilation access-control ios swift

6
推荐指数
0
解决办法
682
查看次数

Rust build.rs 脚本的条件编译?

锈病语言支持条件编译使用类似的属性#[cfg(test)]。Rust 还支持使用文件来运行代码的构建脚本build.rs,作为构建过程的一部分以准备编译。

我想在 Rust 代码中使用条件编译来根据我们是否正在编译构建脚本来有条件地编译,类似于test构建的可能方式。

想象一下:

#[cfg(build)]
fn main() {
    // Part of build script
}

#[cfg(not(build))]
fn main() {
    // Not part of build script, probably regular build
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为build这里不是有效的标识符。是否可以使用不同的属性来做到这一点,或者可以使用其他一些技巧来实现类似的目标?


对于此问题的某些上下文:
我的目标是clap在编译时生成 shell 完成脚本。我App对应用程序中的多个文件有相当全面的定义。我想build.rs通过使用include!(...)宏包含这些部分来使用它(如 所建议clap),所以我不必App第二次定义。这会与它产生一些依赖关系,我想在build.rs文件使用时将其排除,因为在这种情况下不需要它们。就是我试图在我的build.rs脚本中提供的内容。

conditional-compilation rust

6
推荐指数
1
解决办法
1673
查看次数

SwiftUI预览环境有Swift编译条件吗?

Objective C具有预处理器,Swift具有允许在不同环境中使用不同代码的编译条件,例如用于调试或发布构建:

#if DEBUG
    print("debug message")
    doDebugAction()
#else
    doReleaseAction()
#endif
Run Code Online (Sandbox Code Playgroud)

我可以添加仅针对 SwiftUI 预览进行编译的代码吗?就像是:

#if targetEnvironment(swiftUIPreview) 
    static func mock() -> SomeStruct {
        // fill random data
    } 
#endif
Run Code Online (Sandbox Code Playgroud)

conditional-compilation swift swiftui

6
推荐指数
1
解决办法
1338
查看次数

如何对 Cargo.toml 的每个功能单独运行货物检查/测试?

Cargo 功能允许条件编译,因此最终版本将仅包含可由最终用户过滤的特定功能组。

现在,根据库箱的复杂性,您可能会以形成依赖树的几个功能结束,例如:

[features]
banana = []
avocado = []
pineapple = ["avocado"]
orange = ["pineapple", "banana"]
Run Code Online (Sandbox Code Playgroud)

很自然,除此之外cargo check|test --all-features,我会希望cargo check|test --features banana在每一项单独的功能上运行,以确保它们能够独立运行。目前,我正在使用一个粗略的 shell 脚本来完成此操作,并手动提供这些功能。如果我添加一个新功能但忘记将其添加到脚本中,我就会遇到麻烦。

FEATS=(banana avocado pineapple orange)

for FEAT in "${FEATS[@]}" ; do
    echo "$FEAT..."
    cargo check --features "$FEAT"
    #cargo test --features "$FEAT"
done
Run Code Online (Sandbox Code Playgroud)

那么,是否有任何自动化方法可以cargo check|test --features banana逐一运行每个功能,然后报告已发现的警告/错误?

conditional-compilation rust rust-cargo

6
推荐指数
1
解决办法
1326
查看次数