проблема компиляции и сборки в Vc++
VC++ 6
Имееться два проекта использующих общие файлы
при компиляции через #define и #if задаються особенности сборки (т.е. фактически получаеться два проекта но собранных в различных конфигурациях)
при сборке в exe включаеться код который реально не нужен
конечная задача как сделать что бы exe не было не используемого кода
вопрос можно сформулировать иначе как указать компилятору и линковщику, что в случаи если определенны определенная переменная не компилировать и не подключать заданные obj
что пытался сделать
вынес код который используеться только в опеределенных случаях в отдельные файлы
все с и h включенны в проект но я наделяся что линкер определит что если функции из данного obj не используються то подключать его не надо (я думал это и есть инкрементальная сборка)
этого не произошло
вижу другой вариант
код который используеться не всегда собрать в виде lib и подлкючать его только если он нужен
но такой подход мне не очень удобен хочеться что бы все исходники были в одном месте
подскажите пожалуйста как сказать компилятору и линкощику из среды VC++ что данный файлы компилировать и линковать только если заданно определеное условие
Спасибо
Подскажите пожалуйста как решить следующу проблему
VC++ 6
Имееться два проекта использующих общие файлы
при компиляции через #define и #if задаються особенности сборки (т.е. фактически получаеться два проекта но собранных в различных конфигурациях)
при сборке в exe включаеться код который реально не нужен
конечная задача как сделать что бы exe не было не используемого кода
вопрос можно сформулировать иначе как указать компилятору и линковщику, что в случаи если определенны определенная переменная не компилировать и не подключать заданные obj
что пытался сделать
вынес код который используеться только в опеределенных случаях в отдельные файлы
все с и h включенны в проект но я наделяся что линкер определит что если функции из данного obj не используються то подключать его не надо (я думал это и есть инкрементальная сборка)
этого не произошло
вижу другой вариант
код который используеться не всегда собрать в виде lib и подлкючать его только если он нужен
но такой подход мне не очень удобен хочеться что бы все исходники были в одном месте
подскажите пожалуйста как сказать компилятору и линкощику из среды VC++ что данный файлы компилировать и линковать только если заданно определеное условие
Спасибо
Не понимаю, ведь есть же #define/#ifdef/#ifndef, так в чем проблема??? Они замечательно это делают! Если какой-то кусок кода, обрамленный #ifndef..#endif (к примеру), будет исключен из программы, то естественно что он и не будет компилироваться и включаться в конечный исполняемый файл! Вроде это тебе и нужно?...
спасибо за ответ
да мне нужен именно такая функциональность но #if мне не очень подходит по причине:
отключать надо более 30 файлах, мне не тяжело внести в них #if но хочеться сделать красиво
как я понимаю если бы я собирал через make я в make файле задать условие компиллировать-подключать но я работаю из среды VC и не могу понять как в ней задать условие что заданные файлы компилируються подключаються только если выполняеться условие
>программы, то естественно что он и не будет >компилироваться и включаться в конечный >исполняемый файл! Вроде это тебе и нужно?...
спасибо за ответ
да мне нужен именно такая функциональность но #if мне не очень подходит по причине:
отключать надо более 30 файлах, мне не тяжело внести в них #if но хочеться сделать красиво
как я понимаю если бы я собирал через make я в make файле задать условие компиллировать-подключать но я работаю из среды VC и не могу понять как в ней задать условие что заданные файлы компилируються подключаються только если выполняеться условие
Там в опциях линковщика по моему надо изменить Eliminate unreferenced data
Там в опциях линковщика по моему надо изменить Eliminate unreferenced data
спасибо за ответ
на уровне lib данная функция работает отлично (т.е. не используемые lib не линкуються), а на уровен obj не работает ;o(
спасибо за ответ
да мне нужен именно такая функциональность но #if мне не очень подходит по причине:
отключать надо более 30 файлах, мне не тяжело внести в них #if но хочеться сделать красиво
Ну, тогда можешь добавлять #if'ы не в сами файлы, а только в то место, где они подключаются через #include, то есть:
#ifndef DO_NOT_INCLUDE
#include "..."
#include "..."
...
#endif
Правда, в этом случае, насколько я понимаю, нельзя будет подключать к самому проекту файлы *.срр , потому что насколько я в курсе, они тогда компилироваться будут в любом случае.
отключать надо более 30 файлах, мне не тяжело внести в них #if но хочеться сделать красиво
Есть еще вариант - в диалоге Project Settings, для каждого конкретного файла есть флажок "Exclude from build" (вкладка General). Но в этом случае тебе придется устанавливать его 30 раз :D , что не слишком удобно... :)
Хе хе... только что взглянул - такой же флажок есть для папок, а значит ты можешь создать новую папку и запихать туда все такие файлы и одним флажком изменять ход компиляции. 8)
Хе хе... только что взглянул - такой же флажок есть для папок, а значит ты можешь создать новую папку и запихать туда все такие файлы и одним флажком изменять ход компиляции. 8)
mrhx спасибо за ответ. Это то что мне необходимо.
Спасибо