Как правильно настроить мой скрипт после сборки в visual studio

Поэтому в настоящее время я пытаюсь создать файл .lib из моего exe-файла, используя сценарии сборки Visual Studio, как это было предложено в принятом ответе на этот пост: Ссылка на несколько .obj для модульного тестирования консольного приложения. По сути, сценарий после сборки, который они рекомендуют разместить в событии после сборки моего проекта:

lib /NOLOGO /OUT:"$(TargetPath).lib" "$(ProjectDir)\$(Configuration)\*.obj"

Вот как выглядит моя текущая структура каталогов:

-Solution
- Project
-Source
.cpp files
- ProjectTester
- Solution.sln

Итак, моя команда выглядит так:

lib /NOLOGO /OUT:"$(TargetPath).lib" "$(ProjectDir)\Source\*.obj"

В настоящее время это ничего не делает, как будто Visual Studio полностью игнорирует этот скрипт сборки. Мои квесты:

Что именно разрешает $ (TargetPath) .lib?

а также

Правильно ли мое понимание этого сценария сборки? Если это так, как я могу изменить этот скрипт, чтобы делать то, что я хочу?

Обновить:

Я изменил несколько пробелов в целевом пути, и теперь я получаю LNK1146 no argument specified with option /OUT: ошибка.

0

Решение

Вы не упоминаете, с какой версией Visual Studio вы работаете. По памяти ответ не сильно меняется, но я отвечу за Visual Studio 2015, потому что это то, что мне пригодится.

Одним из способов изучения значений макросов, которые должны работать для всех версий Visual Studio, является использование ECHO команда. Измените сценарий после сборки, чтобы он

echo TargetPath: "$(TargetPath)"

и вы должны быть в состоянии прочитать значение макроса в окне вывода при создании проекта. В большинстве современных версий Visual Studio Echo трюк не должен быть необходимым, однако.

в Событие после постройки страницу свойств, нажмите на раскрывающийся список в конце Командная строка поле, а затем нажмите на < Редактировать …>. В Visual Studio 2015 в следующем диалоговом окне будут показаны командная строка (и) и оцененное значение, чтобы вы могли видеть командную строку (и) с развернутыми макросами.

Там также Макросы >> кнопка. Нажмите на эту кнопку, и вы получите диалоговое окно, которое показывает имя каждого макроса и его значение. Текстовое поле в верхней части списка позволяет фильтровать результаты по тем, которые содержат последовательность символов.

$(TargetPath) описано Вот как «Абсолютный путь к первичному выходному файлу для сборки (определяется как диск + путь + базовое имя + расширение файла)». Что это на самом деле означает ценность Выходной каталог, Имя цели, а также Расширение цели свойства на генеральный страница свойств.

Инструмент LIB описан Вот. Чтобы получить больше информации о запуске LIB, вы можете добавить параметр / VERBOSE. Вы также можете удалить параметр / NOLOGO, чтобы вы как минимум получили подтверждение того, что вы используете LIB (и используете правильную версию LIB).

Трудно сказать, что на самом деле означает «ничего не делает». Я предполагаю, что наиболее вероятные сбои — это либо создание файла lib, но не там, где вы ожидаете; или нет файлов obj в $ (ProjectDir) \ Source.

Один из способов исследовать этот последний случай — изменить событие после сборки на

dir "$(ProjectDir)\Source\*.obj"

а затем проверьте вывод сборки, чтобы увидеть, есть ли в списке файлы obj. Если в каталоге нет файлов .obj, в окне вывода появится нечто похожее на

1>   Directory of C:\TestPrograms\vc.net.2015\VCConsole
1>
1>  File Not Found

и окно Список ошибок покажет, что команда dir завершилась с кодом 1.

1

Другие решения

Других решений пока нет …