2017-02-08 3 views
13

Мне нужно сгенерировать заголовочный файл C++, который описывает используемый компилятор.Может ли Visual Studio сгенерировать файл конфигурации?

Традиционно мы использовали команду CMake:

configure(${PROJECT_SOURCE_DIR}/configure.h.in ${PROJECT_BINARY_DIR}/configure.h) 

, который заменяет все строки, зажатой на «@» (например, @ cxx_compiler_name @) со значением этой переменной в системе CMake сборки.

Нам было предоставлено требование противостоять CMake, так что есть что-то эквивалентное в Visual Studio. Я хотел бы заполнить файл заголовка некоторыми значениями в макросах Visual Studio.

+2

Один трюк заключается в том, чтобы добавить проект C# в том же решении для этой цели генерации кода, добавить configure.h.tt («шаблон T4», они могут выводить любое расширение файла, например .h или .cpp) в этом проект, без какого-либо другого кода на C#, и сконфигурируйте решение, чтобы проект C++ зависел от C#, поэтому он строит после него. Вы можете добавить задачу msbuild в vcxproj, чтобы скопировать сгенерированный файл на C++ или включить его непосредственно в проект C++. Подробнее о T4 здесь: http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx –

ответ

2

Вы можете добавить файл configure.h.in в проект и задать для него произвольную конструкцию, которая будет работать perl или sed и заменить все необходимое. Не забудьте добавить configure.h в свойство вывода файлов, чтобы Visual Studio могла определить зависимости и «построить» configure.h.in перед другими источниками, которые используют configure.h.

+0

С помощью Cmake вы можете напрямую использовать компиляторы имена и версии. sed будет работать, но это будет одна длинная команда для всех замен, которые у меня есть. Perl также будет работать, но я скорее скрипту с CMake, если я собираюсь привести еще один инструмент. – KlingonJoe

+0

@KlingonJoe Вы можете попробовать использовать MSBuild для этого http://stackoverflow.com/a/7888659/70930, но я не уверен, что проще. – Paul

Смежные вопросы