是否可以在sln文件中而不是在项目中设置预处理器宏? (VS2008 c ++)

时间:2010-09-23 15:41:11

标签: visual-studio visual-c++ macros preprocessor

我正在维护一个大型代码库,一些vcproj文件用于不同的解决方案。由于一些可怕的配置和依赖性,似乎处理一些构建问题的最佳方法是#ifdef代码,但为了做到这一点,我需要在解决方案文件级别而不是在vcproj级别设置预处理器定义。

这可能吗?

怎么做?

6 个答案:

答案 0 :(得分:4)

选择解决方案中的所有项目。项目+属性,C / C ++,预处理器,预处理器定义。添加

/DSOLUTION=$(SolutionName)

您现在可以在源代码中测试SOLUTION宏值。

答案 1 :(得分:4)

我相信您可能想要做的是创建一个项目属性表,其中包含所有项目都可以继承的VS Project Manager。这将允许您在一个位置设置任何常见的项目设置,包括预处理器宏,并根据需要继承它们。

答案 2 :(得分:3)

我终于找到了适合我的事情

在我的" C:\ Users \\ AppData \ Local \ Microsoft \ MSBuild \ v4.0"

我改变了一点:

<?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(SolutionDir)\$(SolutionName).props"  Condition="Exists('$(SolutionDir)\$(SolutionName).props')"/>      
</Project>

现在,如果一个&#34; mysolution.props&#34;放在&#34; mysolution.sln&#34;旁边。然后我得到整个解决方案的属性表,而不会改变我的项目内的任何内容。它成为我的Visual Environement的新功能

答案 3 :(得分:1)

2008 sln真的很蠢,他们只有项目/文件列表放在解决方案资源管理器和项目依赖项中,所以我不认为这是一个选项。

我的直觉是用相对路径做点什么。例如,在你的stdafx.h中,你可以#include“.... \ project_configuration.h”,然后为了构建sln a,你可以检查一个目录,然后另一个。每个都有其独立的project_configuration.h。

我相信你可以用vsprops文件做类似的事情,对于vcproj文件基本上都是#includes,尽管我发现它们有点烦人的维护。

答案 4 :(得分:1)

另一个问题:

使用类似

的内容编辑vcxproj(或vcxproj.user)
.filter()

它不完美,因为它取决于你的sln文件名。 如果我们使用$(SolutionConfiguration)变量,那就太棒了。

不幸的是,我只看到项目配置的变量:$(Configuration)。

无论如何,它都有诀窍......

答案 5 :(得分:0)

好吧,我也看了

Define a preprocessor value from command line using MSBuild

msbuild, defining Conditional Compilation Symbols

并且那些可能也可以,但是我们的构建系统现在非常脆弱,我无法改变它。

我想出的解决方案是在解决方案中克隆项目的构建配置,并为其命名。然后我为这个新配置添加了一个宏/预处理器定义。

似乎可以按预期工作。因此,一个解决方案使用旧的“发布”配置,另一个解决方案使用克隆“ReleaseSpecial”(不是我真正使用的名称)配置与不同的预处理器defs。

不理想,但有效。

如果这些propoerties更容易处理或者SLN文件可以在预处理器defs中传递,那将是很好的。