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

Привет всем!

Подскажите, можно ли в 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

Reply to
Leha Bishletov
Loading thread data ...

Привет 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] Алексей М. ... Без труды не выкачаешь почту из фиды...

Reply to
Alex Mogilnikov

Привет, 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

Reply to
Leha Bishletov

Привет!

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

  1. Попробуй утилиту "echo" из комплекта GNU утилит, у нее больше функций и надеюсь нет ограничения на длину строки.
    formatting link
    PS: Ограничение длины строки может зависеть от параметров окружения.

_______ Сергей.

Reply to
Sergey Pinigin

Привет 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] Алексей М. ... Собака - вдруг человека...

Reply to
Alex Mogilnikov

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.

Reply to
Kirill Frolov

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

Reply to
Alexey Musin

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

Reply to
Alexey V Bugrov

Привет Alexey!

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

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

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

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

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

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

Reply to
Alex Mogilnikov

Привет!

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

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

_______ Сергей.

Reply to
Sergey Pinigin

Привет!

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

_______ Сергей.

Reply to
Sergey Pinigin

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

Reply to
Alexey Musin

Привет 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] Алексей М. ... Завтрак съешь сам, обед оставь себе, а ужин - никому не отдавай!

Reply to
Alex Mogilnikov

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

Reply to
Alexey Musin

Привет 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] Алексей М. ... Даже лошадь Пржевальского может быть собакой Павлова.

Reply to
Alex Mogilnikov

Привет 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.

Reply to
Alex Mogilnikov

Привет, Kirill! Вы писали для Leha Bishletov , Wed, 25 Feb 2004 12:44:45 +0300:

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

Я пробовал устанавливать ему в качестве SHELL sh.exe - перестал запускаться компилятор :( Разбираться я особо не стал, потому что хотелось с минимальными усилиями перейти на GNUmake. Наверное были какие-то проблемы с переменными окружения или с \ и / . Еще что меня расстроило в GNU make под win это невозможность использования команд типа move erase и т.п. Пришлось взять GNU mv, rm ... портированные под win, естественно. Не очень приятно было узнать, что 8 пробелов != табуляция (и зачем ему в качестве разделителя выбрали именно табуляцию???). Пришлось "обычный" файл обрабатывать sed-ом, а затем уже make. Кстати, а что такое mktemp?

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

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

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

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

KF> И вообще, для создания *временных* файлов следует использовать mktemp.

Но конкретно про управляющие файлы линкера - они у меня обычно не временные, а постоянные, зависящие от makefile

типа

$(PROJ).lnk : makefile echo тра-ля-ля >$@ echo $(OBJS) >>$@

link: $(OBJS) $(PROJ).lnk

В цели clean этот файл удаляется, чтобы не болтался зря, а между перекомпиляциами он не вытирается, чтобы не пересоздавать лишний раз. Привычка от работы с дискет :-)

wbr,

Reply to
Oleksandr Redchuk

Привет 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] Алексей М. ... Пирожок сушеный с сушкой.

Reply to
Alex Mogilnikov

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

Иметь настроенный (по-минимуму -- PATH прописать) shell. Тогда остаётся только определить переменную: SHELL = bash.exe. Если переменная SHELL не определена, используется /bin/sh в юнихах и %COMSPEC% в виндовсах, который cmd.exe или command.com.

*Это описано всё в документации...*
Reply to
Kirill Frolov

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.