набор файлов для source нельзя установить динамически (утилита build)

Тема в разделе "LANGS.C", создана пользователем like_a, 17 июл 2007.

  1. like_a

    like_a New Member

    Публикаций:
    0
    Регистрация:
    13 дек 2006
    Сообщения:
    16
    Есть такие строчки в файле source. Написаны они для того чтобы с помощью значения FOO_MACROS управлять составом компилируемых файлов. Если FOO_MACROS==YES, то компилим foo2.c, если FOO_MACROS=NO, то - foo1.c.

    !IF "$(FOO_MACROS)" != "YES"
    !MESSAGE compiling foo1.c
    SOURCES=foo3.c foo4.c foo5.c foo1.c
    !ELSE
    !MESSAGE compiling foo2.c
    SOURCES=foo3.c foo4.c foo5.c foo2.c
    !ENDIF

    В файле source присутсвуют еще настройки, но они на source не влияют (IMHO)

    Собираю. Смотрю в лог и вижу:

    BUILD: Examining ыщьу c:\some_directory\src directory tree for files to compile.
    Compiling c:\some_directory\src\foo directory ********************
    'nmake.exe /c BUILDMSG=Stop. -i NTTEST= UMTEST= NOLINK=1 386=1'
    compiling foo1.c
    cl -nologo -Ii386\ -I. -IC:\WINDDK\3790\inc\mfc42 -I.\..\..\build\include -I.\..\..\build\temp -Iobjfre_w2K_x86\i386 -IC:\WINDDK\3790\inc\w2K -IC:\WINDDK\3790\inc\w2K -IC:\WINDDK\3790\inc\ddk\w2K -IC:\WINDDK\3790\inc\ddk\wdm\w2K -IC:\WINDDK\3790\inc\crt -D_X86_=1 -Di386=1 -DSTD_CALL -DCONDITION_HANDLING=1 -DNT_INST=0 -DWIN32=100 -D_NT1X_=100 -DWINNT=1 -D_WIN32_WINNT=0x0500 /DWINVER=0x0500 -D_WIN32_IE=0x0501 -DWIN32_LEAN_AND_MEAN=1 -DDEVL=1 -D__BUILDMACHINE__=WinDDK -DFPO=1 -DNDEBUG -D_DLL=1 /c /Zel /Zp8 /Gy /Gi- /Gm- -cbstring /W3 /WX /Gz /QIfdiv- /G6 /GX- /GR- /GF -Z7 /Oxs /Oy /Fa -FIC:\WINDDK\3790\inc\w2K\warning.h .\foo3.c .\foo4.c .\foo5.c .\foo2.c
    foo3.c
    foo4.c
    foo5.c
    foo2.c
    Generating Code...

    Stop.

    Почему так произошло? Помогите справится с загадкой build. Макрос SOURCES безусловно является особенным, но о подобной особенности нигде информации я не нашел. даже здесь http://msdn2.microsoft.com/en-us/library/ms792413.aspx
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Код (Text):
    1. TARGETNAME=drv
    2. TARGETTYPE=DRIVER
    3. TARGETPATH=bin
    4.  
    5. FOO_MACROS=NO
    6.  
    7. !IF "$(FOO_MACROS)" != "YES"
    8. !MESSAGE ___COMPILING foo1.c
    9. SRC_ADD=test1.c
    10. !ELSE
    11. !MESSAGE ___COMPILING foo2.c
    12. SRC_ADD=test2.c
    13. !ENDIF
    14.  
    15. !MESSAGE $(SRC_ADD)
    16. SOURCES=driver.c $(SRC_ADD)
    17. !MESSAGE $(SOURCES)
    везде выводится test1, однако
    Код (Text):
    1. 1>BUILDMSG: Processing f:\projects\test\src\driver
    2. 1>___COMPILING foo1.c
    3. 1>test1.c
    4. 1>drvdump.c test1.c
    5. 1>cl -nologo -Ii386\ -I. -IF:\DDK\WinXPSP1\inc\mfc42 -Iobjfre_wxp_x86\i386 -IF:\DDK\WinXPSP1\inc\wxp -IF:\DDK\WinXPSP1\inc\wxp -IF:\DDK\WinXPSP1\inc\ddk\wxp -IF:\DDK\WinXPSP1\inc\ddk\wdm\wxp -IF:\DDK\WinXPSP1\inc\crt -D_X86_=1 -Di386=1  -DSTD_CALL -DCONDITION_HANDLING=1   -DNT_INST=0 -DWIN32=100 -D_NT1X_=100 -DWINNT=1 -D_WIN32_WINNT=0x0501 /DWINVER=0x0501 -D_WIN32_IE=0x0600    -DWIN32_LEAN_AND_MEAN=1 -DDEVL=1 -D__BUILDMACHINE__=WinDDK -DFPO=1  -DNDEBUG -D_DLL=1      /c /Zel /Zp8 /Gy -cbstring /W3 /WX /Gz  /QIfdiv- /QIf /G6 /Gi- /Gm- /GX-  /GR- /GF  -Z7 /Oxs /Oy   -FIF:\DDK\WinXPSP1\inc\wxp\warning.h   .\drvdump.c .\test2.c
    6. 1>drvdump.c
    7. 1>test2.c
    какой-то бред.
     
  3. like_a

    like_a New Member

    Публикаций:
    0
    Регистрация:
    13 дек 2006
    Сообщения:
    16
    С помощью одного файла source решить проблему так и не удалось, но решение есть. Можно сделать две директории, в которые нужно поместить только файлы source и makefile. Эти файлы должны ссылаться на исходники родительской директории. В родительской же директории в зависимости от FOO_MACROS нужно генерировать dirs, указывающий на нужную диреткорию. Через задницу, но работает :)

    Спасибо, noName за то что подтвердил существование проблемы, с которой я столкнулся.