2016-06-14 3 views
0

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

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

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

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

+0

Я думаю, что лучший вариант действительно создает статическую библиотеку с общим кодом, как вы уже заметили ... – Aconcagua

+1

Одним из решений является сборка с отключенными предварительно скомпилированными заголовками. Это полностью избавляет от stdafx.h. – user4581301

+1

Вы пытались создать новый фильтр и добавить классы из других проектов в этот фильтр. Это может помочь понять, где находятся другие классы проектов, и вы можете добавить stdafx.h к этому фильтру. – amisam

ответ

1

два, которые появившаяся прямо в мою голову, когда я читал ваш вопрос был:

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

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

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

1

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

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

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

0

Мы создаем файлы .cxx с исходным кодом ИСКЛЮЧЕНИЯ для #include "stdafx.h". Это основной файл, реализующий класс.

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

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

Затем debug и release папки для каждого проекта есть конкретный .obj файл проекта.

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