Совместное использование классов между проектами при обходе зависимостей stdafx.h

У меня есть решение Visual Studio 2010 с несколькими очень тесно связанными проектами. Хотелось бы уйти от совместного использования кода и поделиться некоторыми общими классами между проектами. Мы попытались добавить ссылку на класс из проекта A в проект B, но получаем ошибки компиляции, когда общий класс ссылается на неправильный файл stdafx.h. Обратите внимание, что предварительно скомпилированные заголовки включены (по умолчанию) для обоих проектов.

Мы также узнали, что это невозможно найти #ifdef правильный stdafx.h файл с использованием определений препроцессора.

На данный момент похоже, что наши варианты — создать статический библиотечный проект или несколько проектов и ссылаться на него из проекта А & B, или попробуйте выполнить предварительное копирование события правильного файла stdafx.h в подпапку общего кода. В-третьих, следует перестроить оба проекта, чтобы вообще не использовать stdafx.h.

Все эти варианты кажутся мне излишними. Есть ли более простое решение, которое мне не хватает?

0

Решение

Когда я читал твой вопрос, мне пришло в голову два вопроса:

  1. отключить предварительно скомпилированные заголовки.
  2. скомпилировать общий код в качестве разделяемой библиотеки.

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

Запуск кода через статический анализ выделил бы вещи, которые могли бы ускорить компиляцию (форвард объявил против включений и т. Д.).

1

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

Когда я столкнулся с этой проблемой, я исправил ее:

  1. Переименуйте все файлы stdafx.h, относящиеся к их проекту (stdafx_prj_A.h, stdafx_prj_B.h и т. Д.).
    • Кроме того, вам нужно обновить каждое решение, чтобы использовать правильный предварительно скомпилированный заголовочный файл. Параметр для этого находится в свойствах конфигурации -> C / C ++ -> предварительно скомпилированные заголовки -> предварительно скомпилированный файл заголовка.
    • Не забудьте сделать этот набор для всех конфигураций и платформ.
    • Быть в безопасности. Каждый файл StdAfx.cpp должен содержать только правильный заголовочный файл. Поэтому не включайте все заголовки stdafx в 1 файл StdAfx.cpp.
  2. Переместите любые классы, которые являются общими для проектов, в их собственный проект.

Это по-прежнему позволяет использовать файлы PCH, и вам не нужно беспокоиться о том, что компилятор использует неправильный файл. Если я правильно помню, VS будет использовать текущее имя файла PCH для любого нового класса, который вы создаете.

1

Мы создаем .cxx файлы с оригинальным источником, КРОМЕ для #include "stdafx.h", Это основной файл, который реализует класс.

Затем мы создаем отдельный проект .cpp файлы, которые просто содержат (например, NumEdit.cpp)

#include "stdafx.h"#include "\pathtoimplementation\NumEdit.cxx"

Тогда каждый проект debug а также release папки имеют специфический проект .obj файл.

0
По вопросам рекламы [email protected]