строительство проекта с наддувом и без

У меня есть проект, который может использовать библиотеку ускорения, но также может не использовать ее. У меня есть лист свойств 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


}

Поэтому, если мне не нужна сборка с ускорением, я удаляю лист свойств. Если я хочу построить с ускорением, я добавляю список свойств в проект.

Теперь я хочу создать обе вариации библиотеки: одну с усилением, а другую без усиления.

Могу ли я создать один проект с двумя разными сборками: одна с повышением и одна без повышения, но не добавлять или удалять лист свойств вручную?

Я собираю с помощью msbuild из командного файла.


person mtb    schedule 13.05.2016    source источник
comment
Я не слежу. Как вы будете использовать этот тип позже? Использование команд std::string и boost::any очень разных шаблонов.   -  person SergeyA    schedule 13.05.2016
comment
Да, вы можете, создайте в проекте две разные цели и задайте свойства для каждой цели.   -  person Richard Hodges    schedule 13.05.2016
comment
вы также можете предоставить свойство через командную строку для msbuild с /p:<property>=<value>   -  person Wurmloch    schedule 13.05.2016
comment
@SergeyA на самом деле определяется как std :: map ‹std :: string, boost :: any› или std :: map ‹std :: string, std :: string›   -  person mtb    schedule 13.05.2016
comment
stackoverflow .com / questions / 606660 / и заголовок stackoverflow.com/questions/10714668/   -  person ivan_pozdeev    schedule 18.05.2016


Ответы (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
person mtb    schedule 17.05.2016