Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

проблема компиляции и сборки в Vc++

6.7K
01 июня 2004 года
sergey2b
9 / / 01.06.2004
Подскажите пожалуйста как решить следующу проблему
VC++ 6

Имееться два проекта использующих общие файлы
при компиляции через #define и #if задаються особенности сборки (т.е. фактически получаеться два проекта но собранных в различных конфигурациях)
при сборке в exe включаеться код который реально не нужен

конечная задача как сделать что бы exe не было не используемого кода
вопрос можно сформулировать иначе как указать компилятору и линковщику, что в случаи если определенны определенная переменная не компилировать и не подключать заданные obj

что пытался сделать
вынес код который используеться только в опеределенных случаях в отдельные файлы
все с и h включенны в проект но я наделяся что линкер определит что если функции из данного obj не используються то подключать его не надо (я думал это и есть инкрементальная сборка)
этого не произошло

вижу другой вариант
код который используеться не всегда собрать в виде lib и подлкючать его только если он нужен
но такой подход мне не очень удобен хочеться что бы все исходники были в одном месте

подскажите пожалуйста как сказать компилятору и линкощику из среды VC++ что данный файлы компилировать и линковать только если заданно определеное условие

Спасибо
4.9K
02 июня 2004 года
mrhx
43 / / 04.04.2004
Цитата:
Originally posted by sergey2b
Подскажите пожалуйста как решить следующу проблему
VC++ 6

Имееться два проекта использующих общие файлы
при компиляции через #define и #if задаються особенности сборки (т.е. фактически получаеться два проекта но собранных в различных конфигурациях)
при сборке в exe включаеться код который реально не нужен

конечная задача как сделать что бы exe не было не используемого кода
вопрос можно сформулировать иначе как указать компилятору и линковщику, что в случаи если определенны определенная переменная не компилировать и не подключать заданные obj

что пытался сделать
вынес код который используеться только в опеределенных случаях в отдельные файлы
все с и h включенны в проект но я наделяся что линкер определит что если функции из данного obj не используються то подключать его не надо (я думал это и есть инкрементальная сборка)
этого не произошло

вижу другой вариант
код который используеться не всегда собрать в виде lib и подлкючать его только если он нужен
но такой подход мне не очень удобен хочеться что бы все исходники были в одном месте

подскажите пожалуйста как сказать компилятору и линкощику из среды VC++ что данный файлы компилировать и линковать только если заданно определеное условие

Спасибо



Не понимаю, ведь есть же #define/#ifdef/#ifndef, так в чем проблема??? Они замечательно это делают! Если какой-то кусок кода, обрамленный #ifndef..#endif (к примеру), будет исключен из программы, то естественно что он и не будет компилироваться и включаться в конечный исполняемый файл! Вроде это тебе и нужно?...

6.7K
02 июня 2004 года
sergey2b
9 / / 01.06.2004
>программы, то естественно что он и не будет >компилироваться и включаться в конечный >исполняемый файл! Вроде это тебе и нужно?...

спасибо за ответ
да мне нужен именно такая функциональность но #if мне не очень подходит по причине:

отключать надо более 30 файлах, мне не тяжело внести в них #if но хочеться сделать красиво

как я понимаю если бы я собирал через make я в make файле задать условие компиллировать-подключать но я работаю из среды VC и не могу понять как в ней задать условие что заданные файлы компилируються подключаються только если выполняеться условие
527
02 июня 2004 года
pavor
275 / / 28.09.2003
Цитата:
Originally posted by sergey2b
>программы, то естественно что он и не будет >компилироваться и включаться в конечный >исполняемый файл! Вроде это тебе и нужно?...

спасибо за ответ
да мне нужен именно такая функциональность но #if мне не очень подходит по причине:

отключать надо более 30 файлах, мне не тяжело внести в них #if но хочеться сделать красиво

как я понимаю если бы я собирал через make я в make файле задать условие компиллировать-подключать но я работаю из среды VC и не могу понять как в ней задать условие что заданные файлы компилируються подключаються только если выполняеться условие


Там в опциях линковщика по моему надо изменить Eliminate unreferenced data

6.7K
03 июня 2004 года
sergey2b
9 / / 01.06.2004
Цитата:
Originally posted by pavor

Там в опциях линковщика по моему надо изменить Eliminate unreferenced data



спасибо за ответ
на уровне lib данная функция работает отлично (т.е. не используемые lib не линкуються), а на уровен obj не работает ;o(

4.9K
03 июня 2004 года
mrhx
43 / / 04.04.2004
Цитата:
Originally posted by sergey2b
спасибо за ответ
да мне нужен именно такая функциональность но #if мне не очень подходит по причине:

отключать надо более 30 файлах, мне не тяжело внести в них #if но хочеться сделать красиво

Ну, тогда можешь добавлять #if'ы не в сами файлы, а только в то место, где они подключаются через #include, то есть:
#ifndef DO_NOT_INCLUDE
#include "..."
#include "..."
...
#endif

Правда, в этом случае, насколько я понимаю, нельзя будет подключать к самому проекту файлы *.срр , потому что насколько я в курсе, они тогда компилироваться будут в любом случае.

4.9K
03 июня 2004 года
mrhx
43 / / 04.04.2004
Цитата:
Originally posted by sergey2b
отключать надо более 30 файлах, мне не тяжело внести в них #if но хочеться сделать красиво



Есть еще вариант - в диалоге Project Settings, для каждого конкретного файла есть флажок "Exclude from build" (вкладка General). Но в этом случае тебе придется устанавливать его 30 раз :D , что не слишком удобно... :)

Хе хе... только что взглянул - такой же флажок есть для папок, а значит ты можешь создать новую папку и запихать туда все такие файлы и одним флажком изменять ход компиляции. 8)

6.7K
03 июня 2004 года
sergey2b
9 / / 01.06.2004
Цитата:
Originally posted by mrhx
Хе хе... только что взглянул - такой же флажок есть для папок, а значит ты можешь создать новую папку и запихать туда все такие файлы и одним флажком изменять ход компиляции. 8)



mrhx спасибо за ответ. Это то что мне необходимо.
Спасибо

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог