ну к примеру у меня есть много функций некоторые из которых не вызываются, можно ли как-то сделать что-бы эти функции не компилировались? или к примеру ситуцая есть хидер в котором сотня функций из которых реально может понадобиться лишь пару, и естественно не охота чтобы из-за пары функций включить бинарник всю сотню. а тупо каждый раз копипастить не по дзенски вовсе
Этим занимается компоновщик, но ты должен ему помочь. Клади по функции на один модуль (.asm) и не включай их один в другой (только .inc). Для примера смотри m32lib в комплекте масма. Если используешь чью-то библиотеку, в которой всё свалено в один файл, то здесь ничем нельзя помочь - в общем случае весь код пойдёт в бинарь.
IceStudent спасибо м.. я так понял каждый asm прийдётся добавлять в командной строке к ml, это гимор имхо но раз ничё поделать, прийдётся копипастить
всё равно все имена написаны но в другом файле поподробней upd: возможно как-то прблему можно разрешить спомощью макросав, но опять же писать для каждой функци IFDEF funcname, потом в вызывающем файле каждый этот деф указывать облом
ну написать например bat'ник типа for %%f in (*.asm) do c:\masm32\bin\ml /nologo /c /coff /Cp %%f батники рулят
вот это уже интересней Asterix /офтоп давно хотел найти разобраться в этом скриптовом языке да доку никак не находил, можте подскажете?
rain На RSDN.ru статья "Уроки BATаники" или как-то так. Да и help, команда /? - тоже хорошие источники информации.
а ведь LINK.EXE умеет убирать не нужные куски? Вроде "Global optimization" называется. Правда требует вроде специальных OBJ файлов.
rain По поводу темы - у компилятора C++ есть опция /Gy - function-level linking, она как раз разбивает файл на множество объектников, в каждом по функции. Плохо, что такой опции нет у masm'а :'(
всем спасибо, для себя подойдёт и старая китайская методика копипаста, а если хочешь с кем-то поделиться и не краснеть потом за результат потрудись разбей по модулям
Можно, например и такие батики использовать: Для EXE'шников: Код (Text): @ECHO OFF ECHO. ECHO EXE compiler is runing... ECHO. ml /nologo /c /coff /ID:\MASM32\INCLUDE *.asm IF ERRORLEVEL 1 GOTO ASMError IF NOT EXIST rs.res GOTO ASMToEXE_nores ECHO Compile: rs.res CVTRES /machine:ix86 rs.res > NUL :ASMToEXE_nores ECHO Create: %~n0.exe link /nologo /out:%~n0.exe /SUBSYSTEM:WINDOWS /LIBPATH:D:\masm32\LIB *.obj IF ERRORLEVEL 1 GOTO LINKError DEL *.obj ECHO. ECHO EXE compile complited. ECHO. PAUSE > NUL GOTO TheEnd :ASMError ECHO. ECHO. ECHO ERROR: Assembly error. ECHO. ECHO Press any key for exit. ECHO. PAUSE > NUL GOTO TheEnd :LINKError ECHO. ECHO. ECHO ERROR: Link error. ECHO. ECHO Press any key for exit. ECHO. PAUSE > NUL GOTO TheEnd :TheEnd И для DLL'шек - свой: Код (Text): @ECHO OFF ECHO. ECHO DLL compiler is runing... ECHO. ml /nologo /c /coff /ID:\MASM32\INCLUDE *.asm IF ERRORLEVEL 1 GOTO ASMError ECHO. IF NOT EXIST rs.res GOTO ASMToDLL_nores ECHO Compile: rs.res CVTRES /machine:ix86 rs.res > NUL :ASMToDLL_nores ECHO Create: %~n0.dll ECHO. link /nologo /DLL /DEF:%~n0.def /out:%~n0.dll /SUBSYSTEM:WINDOWS /LIBPATH:D:\masm32\LIB *.obj IF ERRORLEVEL 1 GOTO LINKError IF EXIST %~n0.exp DEL %~n0.exp DEL *.obj DEL %~n0.lib ECHO. ECHO DLL compile complited. ECHO. PAUSE > NUL GOTO TheEnd :ASMError ECHO. ECHO. ECHO ERROR: Assembly error. ECHO. ECHO Press any key for exit. ECHO. PAUSE > NUL GOTO TheEnd :LINKError ECHO. ECHO. ECHO ERROR: Link error. ECHO. ECHO Press any key for exit. ECHO. PAUSE > NUL GOTO TheEnd :TheEnd При этом проект должен быть не разбросан по папкам (все asm-файлы + файл ресурсов rs.res - в одной папке).
Я для таких функций делаю макрообёртки, которые кроме вызова функции ставят флаг условной компиляции (например имя_функции_comp = True), а саму функцию соответственно заключаю в IFDEF имя_функции_comp и размещаю в конец файла (когда все макрообёртки гарантировано отработали). Конечно дело вкуса, но по мне вполне удобно.