make von Cygwin im bestimmten Ordner aufrufen.

Anfängerfragen zum Programmieren mit PureBasic.
funkheld
Beiträge: 636
Registriert: 31.12.2009 11:58

make von Cygwin im bestimmten Ordner aufrufen.

Beitrag von funkheld »

Hallo ,guten Tag.

Im Ordner von Cygwin muss ich make mit return ausführen um etwas zu starten.

Das ist der Ordner:
/home/name/test/

Wie geht das bitte mit purebasic.

Gruss

// Edit: Von "Allgemein" zu "Anfänger" verschoben (Kiffi)
Zuletzt geändert von funkheld am 01.02.2021 21:52, insgesamt 1-mal geändert.
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: make von Cygwin im bestimmten Ordner aufrufen.

Beitrag von ccode_new »

Stelle die Frage bitte noch etwas genauer.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: make von Cygwin im bestimmten Ordner aufrufen.

Beitrag von Kiffi »

Hygge
funkheld
Beiträge: 636
Registriert: 31.12.2009 11:58

Re: make von Cygwin im bestimmten Ordner aufrufen.

Beitrag von funkheld »

Wenn ich mich in diesem Ordner befinde : /home/name/test/
gebe ich ein make und drücke return, dann werden die verschiedenen Programme von Cygwin abgearbeitet.
make sehe ich ja nicht im Ordner , es verrichtet aber seine Arbeit und es wird das Programm compiliert und funktioniert wie ich es haben möchte.

Cygwin läuft unter Win10.

Gruss

Code: Alles auswählen

pebi@LAPTOP-8VHAEO00 ~/test/
$ make   >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  und drücke Return
ab hier arbeitet Cygwin :
preobjs: 'obj/dsk/.folder obj/.folder'
[test]
[test] === PREBUILD PROCCESSING DONE!
[test] ============================================================
[test]
/home/pebi/cpctelera-1.5/cpctelera/tools/sdcc-3.6.8-r9946/bin/sdcc -I/home/pebi/cpctelera-1.5/cpctelera/src -Isrc -mz80  -c  src/cpct_floppy.c -o  obj/cpct_floppy.rel
src/cpct_floppy.c:125: warning 85: in function cpct_loadBinaryFile unreferenced function argument : 'fileName'
src/cpct_floppy.c:125: warning 85: in function cpct_loadBinaryFile unreferenced function argument : 'loadAddr'
/home/pebi/cpctelera-1.5/cpctelera/tools/sdcc-3.6.8-r9946/bin/sdcc -I/home/pebi/cpctelera-1.5/cpctelera/src -Isrc -mz80  -c  src/main.c -o  obj/main.rel
src/main.c:19: warning 154: converting integral to pointer without a cast
from type 'const-int literal'
  to type 'void generic* fixed'
src/main.c:26: warning 59: function 'setze_back' must return value
src/main.c:36: warning 154: converting integral to pointer without a cast
from type 'const-int literal'
  to type 'void generic* fixed'
src/main.c:119: warning 154: converting integral to pointer without a cast
from type 'const-int literal'
  to type 'void generic* fixed'
src/main.c:126: warning 154: converting integral to pointer without a cast
from type 'const-int literal'
  to type 'void generic* fixed'
src/main.c:133: warning 154: converting integral to pointer without a cast
from type 'const-int literal'
  to type 'void generic* fixed'
src/main.c:138: warning 126: unreachable code
/home/pebi/cpctelera-1.5/cpctelera/tools/sdcc-3.6.8-r9946/bin/sdcc -I/home/pebi/cpctelera-1.5/cpctelera/src -Isrc -mz80  -c  src/sprite816.c -o  obj/sprite816.rel
[test] Linking binary file
/home/pebi/cpctelera-1.5/cpctelera/tools/sdcc-3.6.8-r9946/bin/sdcc -mz80 --no-std-crt0 -Wl-u --code-loc 0x4000 --data-loc 0 -l/home/pebi/cpctelera-1.5/cpctelera/cpctelera.lib    obj/cpct_floppy.rel  obj/main.rel  obj/sprite816.rel  -o "obj/test.ihx"
[test] Creating Amsdos binary file obj/test.bin
/home/pebi/cpctelera-1.5/cpctelera/tools/hex2bin-2.0/bin/hex2bin -p 00 "obj/test.ihx" | tee obj/test.bin.log
hex2bin v2.0, Copyright (C) 2015 Jacques Pelletier & contributors

Binary file start = 00004000
Records start     = 00004000
Highest address   = 000046F5
Pad Byte          = 0
[test] Creating Cassette file 'test.cdt'
'test.cdt' < 'test.bin' {Format:'firmware' Load:'0x4000' Run:'0x40F9' Name:'Game'}
[test] Successfully created 'test.cdt'
[test] Creating Disk File 'test.dsk'
DSK : test.dsk
------------------------------------
[test.dsk] Added BIN file 'obj/test.bin'
[test] Successfully created 'test.dsk'
[test.dsk] Added BIN file 'test.scr'
[test.dsk] Added BIN file 'test1.scr'
[test.dsk] Added BIN file 'test2.scr'
[test] All files added to test.dsk. Disc ready.
[test] Creating Snapshot File 'test.sna'
[test] Successfully created 'test.sna'

pebi@LAPTOP-8VHAEO00 ~/test/
$
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: make von Cygwin im bestimmten Ordner aufrufen.

Beitrag von ccode_new »

@funkheld
Hallo,
ich bin tappe immer noch im Dunkeln.

Was möchtest du erreichen?

Möchtest du ein ähnliches Programm für Kompilieranweisungen mit PureBasic erstellen?
(Mit eigenen Makefiles? /Oder soll es die Standard-Makefiles auslesen und verarbeiten können?)

Oder ist das Ziel ein beliebiges PureBasic-Programm in einem beliebigen Ordner auszuführen?
Also so etwas wie das Setzen von systemweiten Pfadvariablen. (setx.exe (mit Adminrechte))

Oder was ganz anderes ?
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
funkheld
Beiträge: 636
Registriert: 31.12.2009 11:58

Re: make von Cygwin im bestimmten Ordner aufrufen.

Beitrag von funkheld »

--------------------------
soll es die Standard-Makefiles auslesen
--------------------------

Ja.

Wenn ich" make" eingebe mit Return geht es mit dem Makefiles los.
Dieses make soll irgendwie mit Purebasic ausgelöst werden.

Gruss
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: make von Cygwin im bestimmten Ordner aufrufen.

Beitrag von ccode_new »

Aha!

Bei "make" handelt es sich um eine EXE-Datei im \bin-Verzeichnis deiner Cygwin-Installation.
Beispiel: cygwin64\bin

Um "make" zu starten muss du es mit RunProgram() im richtigen Verzeichnis öffnen.

Kannst du "make" über die CMD-Konsole aufrufen, oder nur über das Cygwin-Terminal?

Bei 1.
Gebe folgendes ein: ("where" befindet sich in c:\windows\system32\)
where make

2.
Das Cygwin-Terminal sollte bei folgenden Aufruf:
which make
das hier zurückgeben:
/usr/bin/make
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
funkheld
Beiträge: 636
Registriert: 31.12.2009 11:58

Re: make von Cygwin im bestimmten Ordner aufrufen.

Beitrag von funkheld »

------------------------
Kannst du "make" über die CMD-Konsole aufrufen, oder nur über das Cygwin-Terminal?
------------------------

Geht nur über Cygwin-Terminal !

Meldung bei CMD-Console : cygwin1.dll nicht gefunden.

Danke.
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: make von Cygwin im bestimmten Ordner aufrufen.

Beitrag von ccode_new »

Kennst du deinen Pfad zur Cygwin-Installation?
Ist dir bekannt wo die "make.exe" ,die du über das Cygwin-Terminal aufrufst, gespeichert ist?

Ansonsten: Suche nach dieser "make.exe"

kleines (einfaches) Beispiel:

Code: Alles auswählen

Global NewList Files.s()

Procedure Recursive_Search(sPath.s)
  Protected iCurrDir.i, sName.s
  iCurrDir = ExamineDirectory(#PB_Any, sPath.s, "*.*")
  If iCurrDir
    While NextDirectoryEntry(iCurrDir)
      sName = DirectoryEntryName(iCurrDir)
      If  sName <> "." And sName <> ".."
        If DirectoryEntryType(iCurrDir) = #PB_DirectoryEntry_File And FindString(sPath+"\"+sName, "\bin\make.exe")
          AddElement(Files())
          Files() = sPath + "\" + sName
        Else
          Recursive_Search(sPath + "\" + sName)
        EndIf
      EndIf
    Wend                     
    FinishDirectory(iCurrDir)
  EndIf
EndProcedure

Recursive_Search("D:") ;Ändern

ForEach Files()
  Debug Files()
Next
Dann kannst du z.B. eine "EnvironmentVariable" setzen.

Beispiel:
SetEnvironmentVariable("Path", "D:\cygwin64\bin") ;Beispielpfad

Eine 1. Ausgabe erhalten:

Code: Alles auswählen

OpenConsole()

Compiler = RunProgram("make", "", GetCurrentDirectory(), #PB_Program_Open | #PB_Program_Read )
If Compiler
  While ProgramRunning(Compiler)
    If AvailableProgramOutput(Compiler)
      Output$ + ReadProgramString(Compiler, #PB_UTF8) + Chr(13)
    EndIf
  Wend
  Output$ + Chr(13) + Chr(13)
  Output$ + "Exitcode: " + Str(ProgramExitCode(Compiler))
  
  CloseProgram(Compiler) ; Schließt die Verbindung zum Programm
EndIf

PrintN(Output$)
Input()
CloseConsole()
Ich hoffe das hilft erstmal weiter.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
funkheld
Beiträge: 636
Registriert: 31.12.2009 11:58

Re: make von Cygwin im bestimmten Ordner aufrufen.

Beitrag von funkheld »

Danke für die Info.

Die make.exe ist in d:\cygwin\bin.

Das funktioniert ja nicht:
RunProgram("make.exe","", "d:\cygwin\bin")

Da komm ja die meldung mit der fehlenden dll in cygwin.

Gruss
Antworten