2016-05-13 51 views
-1

我有一个项目,可以使用boost库,它也可以不使用它。 我有一个属性表use_boost,可以添加到项目中,并设置路径提升和<PreprocessorDefinitions>标签值为I_AM_USING_BOOST项目建设有和没有提升

在代码中,我有类似:

#ifdef I_AM_USING_BOOST 
    #include <boost/any.hpp> 
#else 
    #include <string> 
#endif 


namespace test 
{ 


#ifdef I_AM_USING_BOOST 
    using my_defined_type = boost::any; 
#else 
    using my_defined_type = std::string; 
#endif 


} 

所以,如果我不希望有增强的生成,我删除属性表。 如果我想用boost来构建,我将属性表添加到项目中。

现在,我想要构建库的两个变体:一个使用boost,一个不使用boost。

我可以有两个不同版本的单个项目:一个有升压,一个没有升压,但不能手动添加或删除属性表?

我使用批处理文件中的msbuild构建。

+2

我不继。你以后如何使用这种类型?使用'std :: string'和'boost :: any'命令的模式非常不同。 – SergeyA

+3

是的,您可以在项目中创建两个不同的目标并为每个目标设置属性。 –

+0

你也可以通过命令行通过msbuild提供属性,使用'/ p: = ' – Wurmloch

回答

0

作为一个解决方案,我已经添加了一个新的项目配置(Release_no_boost),并在该配置中使用boost库删除了属性表。

因此,在批处理文件中,我现在可以通过调用不同的配置为这两个变体运行msbuild。 我现在在批处理文件:

msbuild /t:rebuild /p:Configuration=Release D:\projects\some_test\test_1\test_1.vcxproj 
msbuild /t:rebuild /p:Configuration=Release_no_boost D:\projects\some_test\test_1\test_1.vcxproj 

这也可以被用于多个项目的解决方案,但它需要创建一个解决方案的配置和解决方案中的每个项目,是建立,它设置需要的项目配置。

差异批次,而不是项目文件,它是给定的参数解决方案文件:

msbuild /t:rebuild /p:Configuration=Release D:\projects\some_test\some_test.sln 
msbuild /t:rebuild /p:Configuration=Release_no_boost D:\projects\some_test\some_test.sln