【问题标题】:project building with and without boost [closed]有和没有提升的项目建设[关闭]
【发布时间】:2016-05-13 14:39:25
【问题描述】:

我有一个项目可以使用 boost 库,也可以不使用它。 我有一个属性表 use_boost 可以添加到项目中,并且设置了 boost 的路径和一个带有值 I_AM_USING_BOOST<PreprocessorDefinitions> 标记。

在代码中我有类似的东西:

#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,一种不使用 boost。

我能否拥有一个包含两种不同构建的项目:一种带有 boost,一种没有 boost,但不能手动添加或删除属性表?

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

【问题讨论】:

  • 我没有关注。你以后如何使用这种类型?使用std::stringboost::any 命令的模式非常不同。
  • 可以,在项目中创建两个不同的目标并为每个目标设置属性。
  • 你也可以通过命令行向 msbuild 提供属性/p:&lt;property&gt;=&lt;value&gt;
  • @SergeyA 它实际上被定义为 std::map 或 std::map

标签: c++ visual-studio boost msbuild propertysheet


【解决方案1】:

作为我的解决方案,我添加了一个新的项目配置 (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

【讨论】:

    猜你喜欢
    • 2012-05-05
    • 1970-01-01
    • 2012-05-28
    • 2017-11-20
    • 2013-09-29
    • 1970-01-01
    • 2012-07-22
    • 2013-12-09
    • 2010-09-14
    相关资源
    最近更新 更多