
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.207] |
![]() |
|
Сообщ.
#1
,
|
|
|
Необходимо наладить сборку проекта не из IDE, а из другого приложения для автоматизации процесса компиляции.
Для этого запускаю из стороннего приложения процесс devenv.exe с параметрами C:\Users\имя_решения.sln /Rebuild Release|x64 И это работает (правда что долго), проект собирается без открытия GUI Visual Studio. Т.е. на выходе получаю обновлённый экзешник, с которым далее приложение будет производить дальнейшие манипуляции. Но столкнулся с тем, что нужно передать дополнительный параметр, либо как макрос либо как константу. Это нужно для того, что бы сборщик знал, что ему собирать в данный момент - отладочную версию, демонстрационную версию либо рабочую версию. Ну, например, это могло бы выглядеть так: C:\Users\имя_решения.sln /Rebuild Release|x64 /Define MY_VERSION=1 Но, к сожалению, это не работает и ничего подобного в документации я не увидел. Описание параметров для devenv тут: https://learn.microsoft.com/ru-ru/visualstu...es?view=vs-2022 Может кто сможет помочь? |
Сообщ.
#2
,
|
|
|
Тут вряд-ли помогу. Но посоветую глянуть в сторону MSBuild, может там все тебе нужное получится.
|
Сообщ.
#3
,
|
|
|
Цитата Timon K @ Но столкнулся с тем, что нужно передать дополнительный параметр, либо как макрос либо как константу. Это может выглядеть так - запускаем .bat файл, в котором: copy откуда-то\define.h в_директорию_проекта\define.h C:\Users\имя_решения.sln /Rebuild Release|x64 А в файле define.h необходимая константа и вообще все определения, которые надо поменять. Понятно, что для разных конфигураций define.h - разные. |
![]() |
Сообщ.
#4
,
|
|
![]() ![]() /Project Задает проект для сборки, очистки или развертывания. Необходимо использовать с /Build, /Rebuild, /Clean или /Deploy. /ProjectConfig Переопределяет конфигурацию проекта, указанную в конфигурации решения. Например: "Debug". Если возможно использование нескольких платформ, следует заключить имя конфигурации в кавычки и включить в него имя платформы. Например: "Debug|Win32". Необходимо использовать с /Project. |
Сообщ.
#5
,
|
|
|
ЫукпШ, похоже, что ваш вариант с подменой файла выглядит наиболее интересным для меня в данной ситуации. Этот файл даже можно даже не копировать, а создавать на лету с одним макросом и разными значениями.
Добавлено Qraizer, я раньше писал на другом ЯП и, конечно, там был свой IDE, компилятор, компоновщик и т.п. Там многое было проще. В том числе можно было сборку легко автоматизировать именно за счёт того, что можно было в командной строке передать входную константу. Мой софт был в нескольких вариантах, могло быть включено несколько разных опций. Я сделал приложение - глобальный компилятор, которое запускает несколько раз сборку проекта, изменяя параметр константы и папку выходного файла в командной строке и компилятор знает, что конкретно нужно сделать (что бы лишние опции софта убрать или наоборот добавить) и куда положить готовый экзешник. В то же время, при отладке проекта и запуске из IDE (через F5) сборщик не имеет входной константы, которая передавалась бы с командной строкой и по этому знает, что сейчас компилируется отладка. А потому все опции должны быть скомпилированы и выданы разработчику проекта. Это было чертовски удобно, поэтому я ищу такой вариант тут. Или что-то подобное. |
Сообщ.
#6
,
|
|
|
Qraizer, да, можно создать новую конфигурацию и в ней можно задать макросы пользователя. Затем в командной строке определять, какая конфигурация будет использована при сборке проекта.
Но у меня пока не получается извлечь эти макросы в самом коде. |
Сообщ.
#7
,
|
|
|
В общем всё оказалось достаточно просто. В свойствах конфигурации есть определения препроцессора. Например, в конфигурации Debug уже встроено определение _DEBUG.
Соответственно, в коде пишем ![]() ![]() #ifdef _DEBUG ...... //Дополнительный код для отладки #endif А в конфигурации Release есть встроено определение _NDEBUG Далее, можно создать ещё конфигурации, например Demo, и задать там соответствующее определение препроцессору _DEMO Из командной строки запускаем компилятор C:\Users\имя_решения.sln /Rebuild Demo|x64 И препроцессор будет иметь определение _DEMO, и в коде будет обрезано всё лишнее. Всё. Это то, что нужно. Всем спасибо. |
![]() |
Сообщ.
#8
,
|
|
Для этого препроцессор и существует. (И потому модули его никогда не заменят полностью.) Передача макросов и их значений может выполняться не только директивами #define в коде, но и параметрами компилятору, т.е. задаваться системой сборки извне компилируемого кода. А система сборки в свою очередь может их брать из других источников. Например, make (или любой его клон, тот же nmake в частности) может формировать их на лету, обрабатывая свой скрипт.
Конкретно Студия умеет работать с переменными окружения, которые из командной строки задавать не составляет проблемы. Достаточно в разделе "Определения препроцессора" в свойствах сборки проекта C++ предусмотреть что-то типа $(MyVars) и можно задавать set MyVars=blah-blah-blah перед сборкой как заблагорассудится. Вообще вот статья на эту тему. Добавлено P.S. Но это естественно конкретно если компилятор. Настраивать подобным образом какой-либо другой компонент системы сборки нужно сообразно его возможностям. В общем случае не все они управляются через параметры командной строки. |
Сообщ.
#9
,
|
|
|
Цитата Majestio @ Но посоветую глянуть в сторону MSBuild, может там все тебе нужное получится. Цитата Qraizer @ Вообще вот статья на эту тему. Qraizer, получается, что ты тоже MSBuild юзаешь/рекомендуешь? ![]() |
![]() |
Сообщ.
#10
,
|
|
Нет, makefile сподручнее. Но это субъективно
|
Сообщ.
#11
,
|
|
|
Для сборок из командной строки лично мне понравилась связка cmake + ninja.
|