2016-05-13 127 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