Как скомпилировать предварительно обработанный файл в объектный файл с помощью компилятора VS - PullRequest
1 голос
/ 05 июня 2019

cl.exe (компилятор языка Visual Studio C / C ++) компилирует исходный файл в предварительно обработанный файл с флагом / P, например. cl /P Source.c создает Source.i

Я хочу скомпилировать этот Source.i (не Source.c) в Source.obj. Как я должен это делать? Не удается найти флаг, который принимает предварительно обработанный файл в качестве ввода.

1 Ответ

4 голосов
/ 05 июня 2019

Вам не нужно делать ничего особенного.Это действительный исходный файл C ++, который просто отправляется вашему компилятору.(Хотя это не будет переносимый исходный файл, поскольку все собственные стандартные библиотеки инструментальных цепочек и все остальное были расширены.)

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

Однако вы можете переименовать его, чтобы у него было хорошее C ++ -подобное расширение.В противном случае вы можете передать /Tp, чтобы ваш файл обрабатывался как C ++, независимо от расширения.(Для GCC это будет -x c++.)

Еще одна вещь, на которую стоит обратить внимание, это то, что он все равно будет выполнять этап предварительной обработки для вашего файла, не зная, что он больше не нужен (все директивы preproc имеютуже был расширен ваш первый шаг), так что это немного потраченное впустую дополнительное время.Но тогда это не (или не должно быть) типичный рабочий процесс.

cl /P Source.c
cl /Tp Source.i
...