有没有办法有条件地#define 依赖项中的符号?

Posted

技术标签:

【中文标题】有没有办法有条件地#define 依赖项中的符号?【英文标题】:Is there a way to conditonally #define a symbol in a dependency? 【发布时间】:2012-06-08 16:58:46 【问题描述】:

我正在研究一个解决方案,其中解决方案中有一个特定的库,可以通过#ifdef 打开或关闭功能。

我在解决方案中有另一个项目将其用作依赖项。在我的构建设置中,我希望能够根据项目中的构建配置定义依赖库中的符号。我在 Visual Studio 中找不到任何方法。

有没有办法做到这一点?

(我意识到这里理想的解决方案是将那些#ifdef 更改为其他内容,但请假设我无法在其他项目中编辑代码)

【问题讨论】:

【参考方案1】:

项目选项中的构建选项卡取决于构建配置下拉列表的选定值。您可以测试,当您选择 Debug 时,Define DEBUG constant 被选中,但不是在 Release 模式下。

只需选择适当的配置(调试、发布或自定义)并设置条件编译符号的值。

【讨论】:

【参考方案2】:

我认为你做不到。没有“解决方案级别”定义,所有定义都针对一个项目。

正如@archil 指出的那样,您可以通过为项目选择正确的配置来实现一些目标。

另一种选择是直接使用 MSBuild 构建项目,而不是使用普通的 VS IDE 路由,这样您就可以通过命令行覆盖定义(http://***.com/questions/479979/msbuild-defining -条件编译符号)

【讨论】:

以上是关于有没有办法有条件地#define 依赖项中的符号?的主要内容,如果未能解决你的问题,请参考以下文章

gradle - 依赖项中的库重复

C++define宏定义中的#,##,@#及符号

为啥即使我的 maven 依赖项中有第三方依赖项,也只需要 OSGi 容器中的第三方依赖项?

有没有办法全局排除 Maven 依赖项?

有没有办法在文本字段表达式中访问SQL查询结果,以有条件地在标题带中显示它?

如何找出是不是在 Maven 应用程序中使用了依赖项中的任何类?