2009-08-19 5 views
0

Я в Visual Studio 2003. У меня есть функция в очень распространенном модуле, который требует 3 других модуля. Я хочу, чтобы только проекты, использующие новую функцию, должны были включать в себя 3 других модуля, а также те, которые не ссылаются на функцию для ссылки без ошибок «неразрешенных внешних символов». Я пробовал ссылку на уровень функции, OPT: REF и каждую настройку проекта, о которой я мог думать, но линкер всегда жалуется. Я сделал простой пример для тестирования. Любые идеи, было бы удивительным ...«неразрешенный внешний символ» для функции unreferenced

//main.cpp 
//#include "a.h" 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
    //a(); 
    return 0; 
} 

//a.h 
#include "b.h" 
void a(); 

//a.cpp 
#include "a.h" 
#include "b.h" 
void a() 
{ 
    b(); 
} 

//b.h 
void b(); 

//b.cpp 
#include "b.h" 
void b() 
{ 
} 

мне нужно для проекта компилироваться только main.cpp и a.cpp в проекте до тех пор, как() никогда не вызывается. Если a() вызывается в _tmain(), то, конечно, b.cpp необходимо добавить в проект.

Компонент, похоже, не применяет OPT: REF до тех пор, пока не будет уверен КАЖДОЙ функции, на которую ссылается ANYWHERE в проекте. Даже если он (b()) ссылается на функцию unreferenced (a()).

ответ

0

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

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

+0

Я добавил функции шифрования/дешифрования в модуль string_utilities. Я думаю, что монолитные модули, которые делают все, не идеальны. – Cowtung

+0

Кроме того, я согласен, что макросы условной компиляции не идеальны. – Cowtung

0

Оффлайн, окружающий сомнительный вызов a() с #ifdef что-то ищет #define d рядом b() звучит многообещающе.

+0

Я подумал об этом, но мне нравится сохранять список предопределений до минимума. Наверное, я надеялся, что есть какая-то настройка VS или функция C++, которую я отсутствовал. – Cowtung

1

Вы рассматривали возможность создания библиотеки необязательной функции и трех зависимостей?

+0

Это, в конечном счете, то, что мы будем делать позже. Общий модуль, о котором я говорю, называется string_utilities.h, который используется повсеместно. Наверное, я надеялся, что есть легкое решение, которое не требует модификации тонны проектов. То, что мне не нравится в libs, заключается в том, что иногда вы можете столкнуться с другими проблемами с разными настройками проекта и барахлом. string_utilities.h/cpp как раз и предполагалось, что это простое быстрое приложение. – Cowtung