标签: conditional-compilation

如何管理单个Haskell程序的多个配置?

在Haskell世界中,什么是autotools的替代品?我希望能够在相同源代码的不同配置之间进行选择.

例如,Haskell中至少有两个MD5实现:Data.Digest.OpenSSL.MD5Data.Digest.Pure.MD5.我想以这样的方式编写代码,它可以找出已安装的库,并且不需要安装另一个库.

在CI中可以使用Autotools/Scons/CMake + cpp.在Python中,我可以抓住ImportError.我应该在Haskell中使用哪些工具?

build-automation configuration haskell conditional-compilation

5
推荐指数
1
解决办法
324
查看次数

OCaml中的条件编译

假设我有一个很长的算法,我想任选地详细调试它.到目前为止,我只是添加了很多if verbose then printf "whatever"代码,但是如果我不想在详细模式中使用它,这会强制代码执行许多无用的测试.

有没有办法获得一个简单的条件编译,如果设置了一个标志,它可以忽略printf行?

例如,我可以通过使用C来做的事情 #IFDEF DEBUG printf .. #ENDIF

ocaml conditional-compilation

5
推荐指数
1
解决办法
842
查看次数

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

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

必须有一个标志或配置,以使VS只编译已更改的文件+依赖文件.它在哪里?

更新:

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

conditional-compilation visual-studio

5
推荐指数
1
解决办法
4191
查看次数

Xcode - 为条件编译定义预处理器宏

我正在使用XCode 4,在我的项目构建设置中,我设置了:

Preprocessor macros
   Debug   DEBUG;FULL
   Release FULL
Run Code Online (Sandbox Code Playgroud)

在同一项目的另一个目标中:

Preprocessor macros
   Debug   DEBUG;LITE
   Release LITE
Run Code Online (Sandbox Code Playgroud)

这两个目标使用完全相同的文件,但plist信息文件是不同的.

然后在我的代码中,我写道:

#ifdef FULL
    // ###### FULL VERSION
    NSLog(@"test");
    // ###### 
#endif
Run Code Online (Sandbox Code Playgroud)

但是从未写过日志.

我究竟做错了什么 ?我不希望(需要)为FULL语句设置一个值.

macros xcode preprocessor conditional-compilation

5
推荐指数
1
解决办法
4797
查看次数

gcc条件编译

我正在学习条件编译,我认为到目前为止我对它很了解.现在,如果我有代码:

 #ifdef UMP_TO_FILE
    //do something here...
 #endif
Run Code Online (Sandbox Code Playgroud)

我跑:

 gcc myprogram.c -DUMP_TO_FILE
Run Code Online (Sandbox Code Playgroud)

然后,代码块"//在这里做某事......"被编译.现在,我的问题是:

-DUMP_TO_FILE标志究竟是什么?

我认为标志是"-D"并且它定义了宏"UMP_TO_FILE",但是我想确定它的结构和"gcc --help"并没有告诉我任何关于这个的信息,也许我不知道如何在互联网上搜索这个!!

非常感谢您分享您的知识!

unix gcc conditional-compilation

5
推荐指数
2
解决办法
4188
查看次数

如何编写单个类以使用不同的数字类型进行多次编译?

我正在尝试编写处理不同数字类型的类.我知道C#(和我一般认为.Net)没有INumber接口,所以我不能使用如下内容:

    public class Adder<T> where T:INumber
    {
        public T Add(T a, T b)
        {
            return a + b;
        }
    }
Run Code Online (Sandbox Code Playgroud)

不过没关系,因为我想避免我的每个号码的装箱/拆箱.但是,我可以为我想支持的每种类型使用条件编译:

#if FLOAT 
    public class AdderF
    {
        public float Add(float a, float b)
#else
    public class Adder
    {
        public int Add(int a, int b)
#endif
        {
            return a + b;
        }
    }
Run Code Online (Sandbox Code Playgroud)

这意味着我需要编写不同的Library.dllLibraryF.dll,但是.有没有更优雅的解决方案呢?

显然,在我的例子中,我可以简单地编写代码两次.但是,我想使用此过程来创建具有整数版本和浮点版本的大型复杂数据结构,因此在更新结构时不希望出现复制粘贴错误的可能性.我也不希望速度损失将浮点结构包装在一个整体包装器中,并且不必要地将所有输入转换为更宽松的数据类型.

.net c# conditional-compilation

5
推荐指数
1
解决办法
185
查看次数

#ifdef __OBJC__在做什么,为什么下面列出了库?

我相信该#ifdef __OBJC__指令可确保我仅为Objective-C导入以下类库。在ifdef语句之后列出类库的目的是什么?这个代码示例不是要达到目的吗?

#ifdef __OBJC__
#import <foundation/foundation.h>
#import <uikit/uikit.h>
#import <coredata/coredata.h>
#endif
</coredata/coredata.h></uikit/uikit.h></foundation/foundation.h>
Run Code Online (Sandbox Code Playgroud)

import objective-c conditional-compilation ios4 ios

5
推荐指数
1
解决办法
3884
查看次数

如何摆脱大型c项目中的ifdef

我得到了一个用C编码的开源项目.它使用#ifdef进行交叉编译.整个源代码中有很多ifdef.我想只为一个平台修改它.我想通过编译器的预处理器(Visual C++)来运行它,但它会将预处理的结果写入一个我不需要的文件.有人知道一种方法来预处理项目,保持其结构完整(所有文件完好无损)?请不要grep.

编辑:

我发现了一个潜在的解决方案(这些天你可以在互联网上找到它真是太棒了).它是boost.wave - 一个C++预处理器库,可以做一些有趣的事情.我不知道结果如何,但我会尝试一下.不过,这不是最终答案,所以如果你有解决方案,那么我会很高兴听到它.

c conditional-compilation visual-c++ c-preprocessor

5
推荐指数
1
解决办法
1124
查看次数

Visual Studio部署项目:根据构建配置的条件文件

我想知道是否有可能构建不同的安装程序,其中包含一个部署项目的不同文件,完全取决于构建配置(调试/发布)?

我想这样做是因为:

  1. 在调试阶段,我们想在测试机器上安装一些额外的调试文件(*.pdb)和二进制文件,这样如果出现任何问题,我们就可以知道发生了什么
  2. 在发布阶段,我们不希望用户拥有这些调试文件.我们不想让用户选择安装*pdb - 他们中的大多数都不知道这些文件的用途,并且它们的选项只会引起混淆

我目前遇到的困难:

  1. 我试图打开部署项目文件(*.vdproj),它与其他类型的项目(如CSharp)非常不同.部署项目文件不是XML,我似乎无法编写如下内容:.
  2. 我检查了Microsoft的网站:http://msdn.microsoft.com/en-us/library/cz6k1z02%28v=vs.80%29.aspx没有与构建配置相关的部署条件.
  3. 由于我想根据构建配置设置条件,我想项目文件至少应该能够告诉当前所选配置是什么.但是,部署配置管理器非常简单 - 我只能更改输出,打包,压缩和安装URL.我似乎无法为其他类型的项目定义任何其他宏(例如CSharp)

conditional-compilation setup-deployment visual-studio-2008

5
推荐指数
1
解决办法
766
查看次数

如何正确弃用板条箱功能

我有一个箱子,到目前为止,它不再需要某个功能。我想弃用它,但不知道如何。

到目前为止,我的计划是首先使其成为默认功能,但是接下来呢?

conditional-compilation deprecated rust rust-cargo

5
推荐指数
1
解决办法
57
查看次数