У меня есть решение Visual Studio 2010 с несколькими очень тесно связанными проектами. Хотелось бы уйти от совместного использования кода и поделиться некоторыми общими классами между проектами. Мы попытались добавить ссылку на класс из проекта A в проект B, но получаем ошибки компиляции, когда общий класс ссылается на неправильный файл stdafx.h. Обратите внимание, что предварительно скомпилированные заголовки включены (по умолчанию) для обоих проектов.
Мы также узнали, что это невозможно найти #ifdef правильный stdafx.h файл с использованием определений препроцессора.
На данный момент похоже, что наши варианты — создать статический библиотечный проект или несколько проектов и ссылаться на него из проекта А & B, или попробуйте выполнить предварительное копирование события правильного файла stdafx.h в подпапку общего кода. В-третьих, следует перестроить оба проекта, чтобы вообще не использовать stdafx.h.
Все эти варианты кажутся мне излишними. Есть ли более простое решение, которое мне не хватает?
Когда я читал твой вопрос, мне пришло в голову два вопроса:
В вашем случае 1 позволит вам быстрее работать, но не удаляйте stdafx из проекта, так как это будет означать, что вам придется пройти через ваш проект и отключить предварительно скомпилированный заголовок. Просто удалите все, что вы добавили, и оставьте его по умолчанию для обоих проектов. Прошло много времени с тех пор, как я должен был это сделать, но я думаю, что тогда я бы щелкнул правой кнопкой мыши и скомпилировал каждый файл cpp отдельно. Это даст вам отсутствующие заголовочные файлы для этого модуля компиляции. Добавьте их, затем промойте и повторите для каждого.
Запуск кода через статический анализ выделил бы вещи, которые могли бы ускорить компиляцию (форвард объявил против включений и т. Д.).
Когда я столкнулся с этой проблемой, я исправил ее:
Это по-прежнему позволяет использовать файлы PCH, и вам не нужно беспокоиться о том, что компилятор использует неправильный файл. Если я правильно помню, VS будет использовать текущее имя файла PCH для любого нового класса, который вы создаете.
Мы создаем .cxx
файлы с оригинальным источником, КРОМЕ для #include "stdafx.h"
, Это основной файл, который реализует класс.
Затем мы создаем отдельный проект .cpp
файлы, которые просто содержат (например, NumEdit.cpp
)
#include "stdafx.h"#include "\pathtoimplementation\NumEdit.cxx"
Тогда каждый проект debug
а также release
папки имеют специфический проект .obj
файл.