Создать makefile

Тема в разделе "WASM.ZEN", создана пользователем Morgenstern, 20 фев 2006.

  1. Morgenstern

    Morgenstern New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2006
    Сообщения:
    14
    Адрес:
    Петербург
    Здрасте! Есть папка с файлами:

    <font size=1>19.02.2006 16:36 <DIR> .

    19.02.2006 16:36 <DIR> ..

    28.07.2001 18:30 20 284 crackme_01.aps

    28.07.2001 18:30 1 060 crackme_01.clw

    19.07.2001 11:45 1 311 crackme_01.cpp

    19.07.2001 11:45 4 168 crackme_01.dsp

    19.07.2001 11:45 543 crackme_01.dsw

    19.07.2001 11:45 1 226 crackme_01.h

    19.07.2001 16:00 5 107 crackme_01.rc

    28.07.2001 18:38 2 652 crackme_01Dlg.cpp

    19.07.2001 11:49 1 320 crackme_01Dlg.h

    19.02.2006 16:36 <DIR> res

    19.07.2001 16:00 593 resource.h

    19.07.2001 11:45 212 StdAfx.cpp

    19.07.2001 11:45 999 StdAfx.h

    </font><!--size-->

    Вопрос: можно ли создать makefile, чтобы скомпилировать этот проект без IDE (знаю, что IDE здесь не при чём, но так понятнее ;))
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Morgenstern

    можно.
     
  3. ssx

    ssx Member

    Публикаций:
    0
    Регистрация:
    19 авг 2003
    Сообщения:
    336
    Morgenstern

    в ide есть пункт меню - produce makefile
     
  4. Morgenstern

    Morgenstern New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2006
    Сообщения:
    14
    Адрес:
    Петербург
    q_q



    ;) Как?



    ssx



    А можно ли обойтись без IDE?
     
  5. CrazyFun

    CrazyFun New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2005
    Сообщения:
    129
    ну думаю можно просто запустив файл make.exe
     
  6. optio

    optio Алексей

    Публикаций:
    0
    Регистрация:
    8 янв 2006
    Сообщения:
    12
    Адрес:
    Томск
    Я предлагаю написать его самостоятельно руками.

    Вот пример makefile (громоздкий, но более менее реальный) (для ассемблерного проекта, но принцип остается неизменным)



    PROG = simple

    RES = rsrc



    MASMPATH = d:\masm32



    DEBUGFLAGS_LINK = /debug /debugtype:cv /pdb:none

    DEBUGFLAGS_ML = /Zi



    $(PROG).exe: $(PROG).obj $(RES).res

    $(MASMPATH)\bin\link.exe $(DEBUGFLAGS_LINK) /subsystem:windows /libpath:$(MASMPATH)\lib $(PROG).obj $(RES).res



    $(PROG).obj: $(PROG).asm

    $(MASMPATH)\bin\ml.exe $(DEBUGFLAGS_ML) /c /coff /I$(MASMPATH)\include $(PROG).asm



    $(RES).res: $(RES).rc

    $(MASMPATH)\bin\rc.exe $(RES).rc



    Несколько комментариев



    Утилита make просматривает содержимое makefile и строит дерево сборки проекта,

    сборка происходит от листьев к корню.

    Сначала указываешь цель, затем через двоеточие список зависимостей

    потом то же для зависимостей - пока не доберешься до исходных файлов.



    Перед выполнением главной цели make проверяет удовлетворение всех зависимостей:

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

    (да, ессно, команд может быть сколько угодно)



    Утилита начинает строить дерево от первой цели, если скажем нужно скомпилировать несколько проектов, то можно вводить фиктивные цели



    any_name: first.exe second.exe



    first.exe: ...

    ...

    second.exe: ...

    ...



    Для выполнения с конкретной цели можно вызывать "make target_name"

    Например

    make clear



    ...

    clear:

    del *.obj

    ...



    Последнее, make - утилита начала 70-х и с того времени сохраняется странное требование - после указания цели перед командой должен стоять символ табуляции ...

    Здесь он не отображается, но он должен (!) быть



    P.S.

    если нужно написать универсальный (ну почти...) то:

    make (по крайней мере в никсах) может распознавать типы файлов по суффиксам и вызывать соответствующие команды - в это я не углублялся - кажется на citforum была статья "эффективное использование make"



    P.S.S

    опять же в никсах есть утилита autoconf для генерации makefile - подробнее так же не знаю, так как пока забил на это...
     
  7. Morgenstern

    Morgenstern New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2006
    Сообщения:
    14
    Адрес:
    Петербург
    optio

    nmake.exe == make.exe ???
     
  8. Morgenstern

    Morgenstern New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2006
    Сообщения:
    14
    Адрес:
    Петербург
    Эх... надыбал-таки я IDE-шку, поэтому можно тему считать закрытой.

    Спасибо ssx,CrazyFun,optio(не лень же тебе было столько писать) и отдельное спасибо q_q за дзенную фразу "можно" :derisive:
     
  9. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    optio



    не фонтан. будет каждый раз заново собирать. а должно учитывать timestamp файлов.
     
  10. optio

    optio Алексей

    Публикаций:
    0
    Регистрация:
    8 янв 2006
    Сообщения:
    12
    Адрес:
    Томск




    Я об этом написал (может не очень понятно) - пересобираются только устаревшие файлы, так что в этом смысле все в порядке.

    Другой вопрос что применять make не очень удобно - в прочем уже написана куча альтернатив.