2016-07-01 27 views
0

Ich versuche, ein Makefile mit GNU Make 4.0 zu erstellen, aber ich stehe auf ein Problem. Dies ist auf einem IBM i, Version 7.2, in der QP2TERM PASE-Umgebung. Die Dateitypen sind auf dieser Plattform nicht standardisiert. Jede Quelldatei endet mit ".mbr"; Der Quellcodetyp kann anhand des Verzeichnisnamens ermittelt werden, der diesen Code enthält. So befindet sich C-Code im Verzeichnis QCSRC, C-Header befinden sich im Verzeichnis H und RPG-Code befindet sich im Verzeichnis QRPGLESRC. Quellcode wird in Module kompiliert und Module werden zu Programmen zusammengefasst. Um die Dinge einfach zu halten, versucht dieser Test nur eine Quelldatei in ein Modul zu kompilieren. das nicht * .mbr ist eine QuelldateiWie füge ich Makefile neue Dateitypen hinzu?

all: file1.module 

file1.module: file1.mbr 
    system "(compile instruction here...)" 

Das Ergebnis make all ist make: 1254-002 Cannot find a rule to create target file1.mbr from dependencies. So ist es, dass die Marke zu erkennen scheint. Wie kann ich sagen, dass alles, was auf .mbr endet, eine Quelldatei ist? Noch besser, wie sage ich es, dass alles, was in .mbr im Verzeichnis QCSRC endet, C-Quelle ist, und alles, was in .mbr im Verzeichnis QRPGLESRC endet, ist RPG-Quelle, also kann ich die relevanten Kompilieranweisungen angeben?

Ich hatte einige begrenzte Erfolg beim Definieren von. SUFFIXES, aber das Make-Handbuch sagt, dass stattdessen Musterregeln verwendet werden sollten. Ich habe versucht, dies ohne Erfolg:

all: file1.module 

%.module: qrpglesrc/%.mbr 
    system "(compile instruction here...)" 

Aber nun angesichts der Fehler ist make: 1254-002 Cannot find a rule to create target file1.module from dependencies.

+1

Die Fehlermeldung erscheint der Name 'file1.mbr' zu erkennen, aber es kann die Datei nicht finden, so dass es denkt, muss es schaffen es - und weiß nicht, wie man das macht. Das ist ein anderes Problem, denke ich. Befindet sich 'file1.mbr' im aktuellen Verzeichnis oder in einem Unterverzeichnis? –

+0

@ JonathanLeffler, du hast Recht! Das aktuelle Verzeichnis wurde auf das Verzeichnis mit dem Makefile festgelegt, nicht auf den eigentlichen Code. Wenn ich in das QRPGLESRC-Verzeichnis "cd", dann funktioniert Make (für diesen einen Test). Wenn ich in das übergeordnete Verzeichnis blogge, das alle Quellcodeverzeichnisse enthält, funktioniert es nicht. Ich habe VPATH verwendet, um das übergeordnete Verzeichnis anzugeben - ich dachte, dass würde sich darum kümmern, aber es scheint nicht. – smeep

+1

Viele Probleme mit der Frage. Schwer zu sagen, welche Benennungskonvention Sie verwenden möchten, da Sie sowohl auf QSYS- als auch auf IFS-Namen verweisen und sich nicht mischen. Können Sie bearbeiten, um OS-Version (anscheinend mindestens i 6.1) einzuschließen. Auch, was "make" willst du verwenden? QShell machen? PASE machen? GNU machen? TMKMAKE? (Andere?) Schließlich, können Sie bearbeiten, um Ihre Erfahrung sowohl mit make und mit IBM i anzuzeigen? Es gibt viel, was geschrieben werden könnte, aber schwer zu sagen, wie Hintergrundinformationen enthalten sind. – user2338816

Antwort

0

Wenn Ihr make Programm ist POSIX compatible dann können Sie das .SUFFIXES spezielle Ziel verwenden und geeignete inference rules einzurichten.

Zum Beispiel könnten Sie so etwas wie haben (pseudo nur)

.SUFFIXES: .suffix_used_to_create_mbr_files 

.suffix_used_to_create_mbr_files: 
    command-to-create-mbr-file 
Verwandte Themen