2009-05-18 2 views
3

поэтому я использую Visual Studio 2005 и для моего текущего проекта. Я создаю надстройку C# для обработки плетения аспектов для AspectC++. Это достаточно просто, чтобы собрать аспект и исходные файлы и передать их в компилятор аспекта, но это создает новые (измененные) исходные файлы. Я пытаюсь эмулировать стандартную надстройку AspectC++: http://www.pure-systems.com/AspectC_Add-In.22+M54a708de802.0.html, поэтому я хотел бы оставить исходные файлы для проекта без изменений, поскольку я кормлю в сплетенных файлах компилятору C++. Предполагая, что я могу это сделать (не знаю, как это сделать), как я могу заставить отладчик правильно указывать исходные исходные файлы? Я знаю, что мне нужно будет отключить опцию VS, чтобы исходный код не соответствовал скомпилированной версии, но я не понимаю, как связать эти два без непосредственного изменения исходных файлов. Любой совет?Как изменить исходные файлы в Pre-Build ... без изменения исходных файлов?

ответ

0

Похоже, вы хотите изменить исходный код перед или после препроцессора. В этом случае вы должны использовать директиву #line, чтобы сообщить компилятору, какой файл и строка он действительно обрабатывает. Так работает препроцессор, он включает все ваши файлы заголовков в один массивный файл, этот файл содержит директивы #line, который позволяет компилятору сообщать об ошибках для правильной строки и указывать правильную строку в символах для отладчика.

Вам следует попробовать просто запустить препроцессор в исходном файле. Это покажет вам, как работает директива #line. Параметр командной строки cl.exe/P поможет вам здесь. Помните, что вам потребуются все другие параметры препроцессора, такие как/D и/I, чтобы скомпилировать файл для этого.

http://msdn.microsoft.com/en-us/library/b5w2czay(VS.71).aspx

+0

Итак, допустим, я попробовал это. Я собирал свои исходные и аспектные файлы, отправлял их в компилятор AspectC++ (Weaver), брал новые сплетенные исходные файлы и периодически вставлял директивы #line по всему модифицированному файлу, указывающему на исходный файл unoven. В конце концов, я отправил бы сплетенные файлы с директивами #line в компилятор C++. Правильно ли я слежу за этим? Когда вы говорите, что это работает с отладчиком, это включает контрольные точки? Есть ли способ сделать это без вставки директив - например, путем изменения некоторых параметров проекта или файла? – 2009-05-18 17:52:06

+0

На самом деле, прочитав руководство AspectC++, я обнаружил, что директивы #line генерируются как часть процесса ткачества. Теперь я задаюсь вопросом, как я могу добавить недавно измененные файлы в компилятор C++ из C# Add-In? – 2009-05-18 18:16:08

+0

Это, наверное, трудная часть. Там VS api должен поддерживать это. Я уверен, что некоторые вещи, такие как Bounds Checker и Purify, тоже должны изменить код. Вы должны поместить сгенерированные файлы в папки Debug или Release, чтобы они не изменяли правильные исходные файлы. – iain

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

  • Нет связанных вопросов^_^