项目建设有没有助推

project building with and without boost

本文关键字:有没有 项目建设      更新时间:2023-10-16

我有一个项目可以使用boost库,也可以不使用它。我有一个属性表use_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从批处理文件中生成。

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

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

msbuild /t:rebuild /p:Configuration=Release D:projectssome_testtest_1test_1.vcxproj
msbuild /t:rebuild /p:Configuration=Release_no_boost D:projectssome_testtest_1test_1.vcxproj

这也可以用于具有多个项目的解决方案,但需要创建一个解决方案配置,并且对于正在构建的解决方案中的每个项目,都会设置所需的项目配置。

批处理的区别在于,它不是项目文件,而是作为参数给出的解决方案文件:

msbuild /t:rebuild /p:Configuration=Release D:projectssome_testsome_test.sln
msbuild /t:rebuild /p:Configuration=Release_no_boost D:projectssome_testsome_test.sln