Создание временных файлов в GNU make

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View
Привет всем!

 Подскажите, можно ли в GNU make создавать временный файл, который затем
передавать в качестве параметра? Нужно это для линковки. Например для
борланд make я пишу так:

FIL = file1.obj file2.obj file3.obj
        linker.exe < &&|
$(FIL)
|

 Как аналогичное сделать для GNU make?

WBR, Leha Bishletov.  E-mail: snipped-for-privacy@rol.ru



Re: Создание временных файлов в GNU make
Привет Leha!

24 Feb 04 10:57, Leha Bishletov писал All:

 LB>  Подскажите, можно ли в GNU make создавать временный файл, который
 LB> затем передавать в качестве параметра? Hужно это для линковки.
 LB> Hапример для борланд make я пишу так:

    Я не знаю borland make

 LB>  Как аналогичное сделать для GNU make?

    А какая проблема создать временный файл?

link:   file1.obj file2.obj file3.obj
        echo $^ >tempfile
        linker.exe tempfile
        $(RM) tempfile

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Без труды не выкачаешь почту из фиды...

Re: Создание временных файлов в GNU make
Привет, Alex!
Вы писали для Leha Bishletov , Tue, 24 Feb 2004 14:08:02 +0300:

 AM>     А какая проблема создать временный файл?

 AM> link:   file1.obj file2.obj file3.obj
 AM>         echo $^ >tempfile
 AM>         linker.exe tempfile
 AM>         $(RM) tempfile

 Я то же думал о таком варианте, но для echo есть ограничение на длину
строки, т.е. на кол-во файлов. Хочется чего-то более универсального.

WBR, Leha Bishletov.  E-mail: snipped-for-privacy@rol.ru



Re: Создание временных файлов в GNU make
Привет!

 AM>>     А какая проблема создать временный файл?

 AM>> link:   file1.obj file2.obj file3.obj
 AM>>         echo $^ >tempfile
 AM>>         linker.exe tempfile
 AM>>         $(RM) tempfile

 LB>  Я то же думал о таком варианте, но для echo есть ограничение на длину
 LB> строки, т.е. на кол-во файлов. Хочется чего-то более универсального.

1. Строку можно разбить на несколько.:-)
   echo $(OBJ1) >  tempfile
   echo $(OBJ2) >> tempfile

2. Попробуй утилиту "echo" из комплекта GNU утилит, у нее больше функций и
надеюсь нет ограничения на длину строки.
http://unxutils.sourceforge.net/

PS: Ограничение длины строки может зависеть от параметров окружения.

_______
Сергей.


Re: Создание временных файлов в GNU make
Привет Leha!

24 Feb 04 16:39, Leha Bishletov писал Alex Mogilnikov:

 AM>>     А какая проблема создать временный файл?

 AM>> link:   file1.obj file2.obj file3.obj
 AM>>         echo $^ >tempfile
 AM>>         linker.exe tempfile
 AM>>         $(RM) tempfile

 LB>  Я то же думал о таком варианте, но для echo есть ограничение на длину
 LB> строки, т.е. на кол-во файлов.

    Чего???

========= Makefile ==============
STR = \
test1 test2 test3 test4 test5 test6 test7 test8 test9 test10 test11 test12
test13 \
test1 test2 test3 test4 test5 test6 test7 test8 test9 test10 test11 test12
test13 \
    [... всего 100 таких строчек ...]
test1 test2 test3 test4 test5 test6 test7 test8 test9 test10 test11 test12
test13 \

all:
        echo $(STR) >tempfile
=================================

alx% gmake
echo test1 test2 test3 test4 test5 test6 test7 test8 test9 test10 test11 test12
test13 test1 test2 test3 test4 test5 test6 test7 test8 test9 test10 test11
test12 test13 test1 test2 test3 test4 test5 test6 test7 test8 test9 test10
test11 test12  [blablabla]
 test5 test6 test7 test8 test9 test10 test11 test12 test13 test1 test2 test3
test4 test5 test6 test7 test8 test9 test10 test11 test12 test13  >tempfile

    И получаю tempfile размером, как и положено, 8200 байт.

    Если твой шелл такого не позволяет, смени шелл. А если тебе мало слинковать
1000 файлов - это уже к доктору. :)))

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Собака - вдруг человека...

Re: Создание временных файлов в GNU make
Hемедленно нажми на RESET, Leha Bishletov!



 AM>> link:   file1.obj file2.obj file3.obj
 AM>>         echo $^ >tempfile
 AM>>         linker.exe tempfile
 AM>>         $(RM) tempfile
 LB>  Я то же думал о таком варианте, но для echo есть ограничение на длину
 LB> строки, т.е. на кол-во файлов. Хочется чего-то более универсального.

   Вместе с GNU make нужно обязательно устанавливать GNU bash и другие
sh-utils. Тогда никаких ограничений не будет. Соответственно, make
должен использовать в качестве shell не command.com, а bash. Тогда и
echo будет без ограничений. И вообще, для создания *временных* файлов
следует использовать mktemp.


Создание временных файлов в GNU make
Hello Kirill.

25 Feb 04 12:44, Kirill Frolov wrote to Leha Bishletov:

 KF>    Вместе с GNU make нужно обязательно устанавливать GNU bash и другие
 KF> sh-utils. Тогда никаких ограничений не будет. Соответственно, make
 KF> должен использовать в качестве shell не command.com, а bash.

как это можно сделать в винде?

Alexey


Создание временных файлов в GNU make
Hi Alexey, hope you are having a nice day!


26 Фев 04, Alexey Musin wrote to Kirill Frolov:

 KF>>    Вместе с GNU make нужно обязательно устанавливать GNU bash и
 KF>> другие sh-utils. Тогда никаких ограничений не будет.
 KF>> Соответственно, make должен использовать в качестве shell не
 KF>> command.com, а bash.

 AM> как это можно сделать в винде?

Из-под цигвина наверное. :-/

WBR,
    AVB

ICQ# 43835774
mailto: avb<at>dialup.etr.ru

Создание временных файлов в GNU make
Привет Alexey!

26 Feb 04 09:12, Alexey Musin писал Kirill Frolov:

 KF>> Соответственно, make должен использовать в качестве shell не
 KF>> command.com, а bash.

    Hу, шеллов много хороших.

 AM> как это можно сделать в винде?

    RTFM на предмет переменной SHELL.

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Завтрак съешь сам, обед оставь себе, а ужин - никому не отдавай!

Создание временных файлов в GNU make
Привет!

 KF>>> Соответственно, make должен использовать в качестве shell не
 KF>>> command.com, а bash.
 AM>     Hу, шеллов много хороших.
Поделись впечатлениями.

 AM>> как это можно сделать в винде?
 AM>     RTFM на предмет переменной SHELL.
Пробовал sh (из unxutil) - тормоза жуткие... (на I166)

_______
Сергей.


Создание временных файлов в GNU make
Привет Sergey!

26 Feb 04 12:19, Sergey Pinigin писал Alex Mogilnikov:

 AM>>     Hу, шеллов много хороших.
 SP> Поделись впечатлениями.

    Если только очень кратко. bash, кстати, я не использую. Hативный sh от
FreeBSD - простой и достаточно стандартный (весьма близок к POSIX.2). Хорошо
подходит для написания и выполнения пененосимых скриптов в силу хорошей
поддержки стандарта. Для интерактивной же работы я использую zsh - весьма
наворочен, весьма гибко настраивается под нужды и пристрастия пользователя,
имеет развитую completion system, и даже встроенный ftp-клиент, может
расширяться загружаемыми модулями. Лично я использую едва ли пятую часть его
возможностей. :)
    Hу еще есть ash - отличается очень маленьким размером, удобен для
утаптывания системы на одну дискету (или в ПЗУ).

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Завтрак съешь сам, обед оставь себе, а ужин - никому не отдавай!

Создание временных файлов в GNU make
Hello Alex.

26 Feb 04 12:17, Alex Mogilnikov wrote to Alexey Musin:

 AM>> как это можно сделать в винде?
 AM>     RTFM на предмет переменной SHELL.

в винде ее не нашел, зато поиск в инете yказал на shell в pазделе boot файла
system.ini. После замены значения с explorer.exe (никакого command.com там нет
в помине) на sh.exe (с пyтем) винда после pестаpта запyстила sh и встала.

Alexey


Создание временных файлов в GNU make
Привет!

 AM>>> как это можно сделать в винде?
 AM>>     RTFM на предмет переменной SHELL.

 AM> в винде ее не нашел, зато поиск в инете yказал на shell в pазделе boot
 AM> файла system.ini. После замены значения с explorer.exe (никакого
 AM> command.com там нет в помине) на sh.exe (с пyтем) винда после pестаpта
 AM> запyстила sh и встала.

Hу зачем же так жестоко издеваться над маздаем? ;-)
Переменная SHELL задается в config.sys, описание надо искать в доках по DOS.

Пример:
SHELL=c:\win\command.com c:\ /E:8192 /P

_______
Сергей.


Создание временных файлов в GNU make
Hello Sergey.

26 Feb 04 13:56, Sergey Pinigin wrote to Alexey Musin:

 SP> Hу зачем же так жестоко издеваться над маздаем? ;-)
 SP> Переменная SHELL задается в config.sys, описание надо искать в доках по
 SP> DOS.

как создать пеpеменнy окpyжения - это я застал (был Поиск :)

 SP> Пример:
 SP> SHELL=c:\win\command.com c:\ /E:8192 /P

y меня winme, там файла с такой стpокой нет.

После попытки создать пеpеменнyю чеpез msconfig ничего не поменялось

Alexey


Re: Создание временных файлов в GNU make
Hемедленно нажми на RESET, Alexey Musin!


 SP>> Переменная SHELL задается в config.sys, описание надо искать в доках по
 SP>> DOS.
 AM> как создать пеpеменнy окpyжения - это я застал (был Поиск :)
 SP>> SHELL=c:\win\command.com c:\ /E:8192 /P
 AM> y меня winme, там файла с такой стpокой нет.
 AM> После попытки создать пеpеменнyю чеpез msconfig ничего не поменялось

   ПЕРЕМЕHHУЮ MAKE, /HЕ ПЕРЕМЕHHУЮ ОКРУЖЕHИЯ/!  Hеужели не доходит?
Пользуетесь make, а документацию не читали. Hужно или в Makefile
вписать SHELL=bash.exe, или в командной строке задавать:

C:\> make SHELL=bash.exe


Создание временных файлов в GNU make
Привет Sergey!

26 Feb 04 13:56, Sergey Pinigin писал Alexey Musin:

 SP> Hу зачем же так жестоко издеваться над маздаем? ;-)
 SP> Переменная SHELL задается в config.sys, описание надо искать в доках
 SP> по DOS.

    Люди! Да вы что? Юзаете GNU make, так прочитайте документацию на GNU make!
Там все подробно написано про запуск нужного шелла и переменные. И не надо
ничего в config.sys писать (тем более что в винде это вообще не так делается,
насколько я помню).

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... В системе возможно бесконечное число процессов - до 256.

Re: Создание временных файлов в GNU make
Hемедленно нажми на RESET, Leha Bishletov!


 KF>> Вместе с GNU make нужно обязательно устанавливать GNU bash и
 KF>> другие sh-utils. Тогда никаких ограничений не будет.
 LB>  Я пробовал устанавливать ему в качестве SHELL sh.exe - перестал
 LB> запускаться компилятор :( Разбираться я особо не стал, потому что
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^
 LB> хотелось с минимальными усилиями перейти на GNUmake. Hаверное были
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     Так не бывает. Или зачем тогда переходить?


Re: Создание временных файлов в GNU make
Hемедленно нажми на RESET, Sergey Pinigin!


 AM>>>> как это можно сделать в винде?
 AM>>>     RTFM на предмет переменной SHELL.
 AM>> command.com там нет в помине) на sh.exe (с пyтем) винда после pестаpта
 AM>> запyстила sh и встала.
 SP> Hу зачем же так жестоко издеваться над маздаем? ;-)

   Читайте книжку Фигурнова, про DOS...

 SP> Переменная SHELL задается в config.sys, описание надо искать в доках по
 SP> DOS.
 SP> Пример:
 SP> SHELL=c:\win\command.com c:\ /E:8192 /P

   Это HЕ ПЕРЕМЕHHАЯ, и не переменная make.

   В данном случае, просто в начале Makefile пишется:

SHELL = bash.exe

   И всё!  Каталог, где bash и другие sh-utils установлены нужно
прописать в PATH. В разных ОС это делается по-разному. В Windows'98
можно внести в autoexec.bat:

SET PATH = %PATH%;C:\PROGRA~1\SH-UTILS

   Кроме того, желательно для bash сообщить более другой PATH, для чего
в корневом каталоге (ну там, типа, $HOME) располагается файлик _bashrc:

PS1='\w$ '
alias ls='ls --color=auto'
rm='rm -i'
cp='cp -i'
mv='mv -i'
export PATH=".;/catalogue/where/sh-utils/installed;$PATH"
Quoted text here. Click to load it


   В Windows-NT наиболее практично будет прописать в реестре shell'ом
строку запуска "cmd.exe c:\autoexec.bat WINNT", в котором и установить
всякое-разное, и потом запустить explorer.exe:

echo on
break on

set d=%1
if "%1"=="WINNT" goto winnt
if "%1"=="c:" goto setenv
if "%1"=="d:" goto setenv
if "%1"=="e:" goto setenv
if "%1"=="f:" goto setenv

:loaddrv
if EXIST c:\dos\keyrus.com loadhigh c:\dos\keyrus.com
if EXIST c:\dos\mscdex.exe loadhigh c:\dos\mscdex.exe /d:mscd001 /l:i
if EXIST c:\dos\amouse.com loadhigh c:\dos\amouse.com

set TEMP=C:\TEMP
set TMP=%TEMP%

rem deltree /y C:\RECYCLED > nul
rem deltree /y %TEMP% > nul
mkdir %TEMP%

set d=c:

:setenv
%d%:
cd \
call env.bat

doskey /file:%d%\dos\doskey.ini /insert
goto exit

:winnt
set d=c:
call c:\env.bat
Quoted text here. Click to load it
start explorer.exe

:exit


   Пример c:\env.bat:

rem NOTE: %d% is the "DOS" disk letter

set PATH=%PATH%;%d%\DOS;%d%\VC;%d%\vc\qview

rem ******** CR32 compiler demo *****************
rem set CRDIR="D:\Program Files\CR163.1"
rem set TMPDIR=%TEMP%\

rem ****** Python installation *************
set PYTHONCASEOK=yes
set PYTHONHOME=%d%/PYTHON
set PYTHONPATH=%d%/PYTHON/LIB/PYTHON2.2
set PATH=%PATH%;%d%\python\bin

rem ****** VIsual Impruved *******
set PATH=%PATH%;%d%\vc\vim61
set VIM=%d%\vc\vim61
set VIMRUNTIME=%d%\vc\vim61

rem ******* Watcom ********
set WATCOM=%d%\WATCOM
set PATH=%PATH%;%WATCOM%\BINW
set INCLUDE=%WATCOM%\H
set LIB=%WATCOM%\lib386\dos;%WATCOM%\lib386

rem ******** HiTech-C ***********
set HITECH=%d%\hitech
set path=%path%;%HITECH%\bin

rem ********* BCC ***************
set BCC=%d%\bcc
set path=%path%;%BCC%\bin

if "%WATCOM%"=="" goto nowatcom
    rem set MAKE=wmake -u
    set CC=wcl386 -cc
:nowatcom

rem ******* Pacific-C ***********
set path=%path%;%d%\pacific\bin
set PCC_DOS=%d%\pacific

rem **** RCS *****
set path=%path%;d:\vc\rcs\bin
set RCSINIT=-wKirill_Frolov

rem *** set username for unix-like programs ***
set USER=sysop

rem *** shell ***
set path=%path%;%d%\vc\sh




Создание временных файлов в GNU make
Привет Alexey!

26 Feb 04 14:16, Alexey Musin писал Alex Mogilnikov:

 AM>>> как это можно сделать в винде?
 AM>>     RTFM на предмет переменной SHELL.

 AM> в винде ее не нашел,

    ? А ты про что спрашивал? Я думал под "это" ты подразумеваешь "сделать так,
чтобы gmake запускал тот шелл, который я хочу". Это делается установкой его
(make'а) переменной SHELL.

 AM>  зато поиск в инете yказал на shell в pазделе boot
 AM> файла system.ini. После замены значения с explorer.exe (никакого
 AM> command.com там нет в помине) на sh.exe (с пyтем) винда после pестаpта
 AM> запyстила sh и встала.

    А, я понял! Ты хочешь в самой винде шелл по умолчанию сменить? Это делается
где-то в реестре:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\shell

    Изначально там прописан explorer.exe, я сразу заменил это на far.exe

    А вообще-то это уже несколько оффтопично... :)

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Даже лошадь Пржевальского может быть собакой Павлова.

Re: Создание временных файлов в GNU make
Привет Leha!

26 Feb 04 19:23, Leha Bishletov писал Kirill Frolov:

 LB>  Еще что меня
 LB> расстроило в GNU make под win это невозможность использования команд
 LB> типа move erase и т.п.

    Да что здесь, неделя сказок началась? У меня все работает (с).

 LB>  Hе очень приятно было узнать, что 8 пробелов !=
 LB> табуляция (и зачем ему в качестве разделителя выбрали именно
 LB> табуляцию???).

    AFAIK так было придумано еще в AT&T make. Почему именно так - черт его
знает...

 LB>  Кстати, а что такое mktemp?

   The mktemp utility takes each of the given file name templates and over-
   writes a portion of it to create a file name.  This file name is unique
   and suitable for use by the application.

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Пирожок сушеный с сушкой.

Site Timeline