Wie schreiben Sie ein makefile für C#?
Ich habe ein einfaches C# - Programm, das ausgeführt werden muss über die Befehlszeile in Linux durch mono. Hier ist, was ich für mein makefile so weit. Es basiert auf einer C++ - makefile-fand ich für ein anderes Programm. Ich habe versucht zu modifizieren, um die Arbeit mit meinem C# - Programm, aber es sagt, bestimmte Quell-Dateien nicht gefunden werden konnten.
.PHONY : build view clean
build : test
@# do nothing
test : test.o
gmcs test test.o
test.o : test.cs
gmcs test.cs
view :
@\less test.cs
clean :
-\rm *.exe
-\rm test
Ich habe noch nie mit makefiles gearbeitet, bevor also ich weiß wirklich nicht, was ich falsch mache. Es gibt nur eine Datei in meinem gesamten Projekt-und das ist nur test.cs. Das endgültige Ziel dieser ist es in der Lage sein, um führen Sie das Programm durch Eingabe in die Befehlszeile:
./test
Und es sollte bereinigen .exe-Dateien generiert, die zu.
- was ist die genaue Fehlermeldung, die Sie bekommen? was ist die Ausgabe von
make test
? - Die Ausgabe ist: gmcs test.cs gmcs test.o-error CS2001: Quelle-Datei 'test' konnte nicht gefunden werden error CS2001: Quelle-Datei 'test.o' konnte nicht gefunden werden Compilation failed: 2 Fehler, 0 Warnungen machen: *** [test] Fehler 1
- Ich glaube nicht, dass das problem mit dem makefile. Sind Sie sicher, dass Sie mit gmcs Recht? Nach mono-project.com/Mono_Basics Sie von dem ersten Befehl, der ausgeführt wird, bekommen Sie eine exe-Datei, nicht ein .o-Datei.
- Ich habe versucht, ändern alle .o Dateien .exe-Datei, aber ich bekomme den Fehler "test.exe" ist eine binäre Datei und nicht um eine text-Datei zusätzlich zu den vorherigen Fehler.
- können Sie MonoDevelop? Jeder Weg, klar, das problem ist nicht das makefile, aber die Art und Weise Sie gmcs. versuchen Sie, kompilieren Sie den code, ohne eine make-Datei, bis Sie die richtigen Befehle.
- Der code wird kompiliert und läuft einwandfrei, alles was ich jetzt brauche ist eine Art make-file. Was ich oben nur auf Basis einer C++ - makefile, aber ich weiß wirklich nicht, was ein C# - makefile Aussehen sollte.
- lassen Sie uns weiter, diese Diskussion im chat
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich zusammen eine wirklich einfache Mono Makefile, das funktioniert für mich:
Dieser hat die schöne Eigenschaft, dass, wenn Sie geben Sie einfach 'machen', es wird wieder kompilieren und ausführen, testen.cs.
all clean run
. stackoverflow.com/questions/2145590/...Bin ich mit einem ziemlich einfachen Modell von Makefile in meinen Projekten. (PS: ich bin kompilieren mit mono auf GNU/Linux, aber es ist ziemlich einfach, ändern Sie die Einstellungen (Lesen Sie meine Kommentare))
Um die Frage zu beantworten, werde ich erklären, mehr über makefiles:
wenn Sie eine Anweisung wie:
heißt es: um die target build testen, werden Sie brauchen target-test.o und führen Sie den Befehl
gmcs test test.o
.beim eingeben in die Befehlszeile
make target
es wird versuchen, zu bauen den Gegner durch die Regeln, die Sie schrieb in der makefile. Also, in unserem Fall, wenn Sie ausführenmake test
das Programm wird versuchen, zu bauen, zu testen, zu sehen, die es braucht, um zu bauen, zu testen.o vor, finden diese Regel:suchen Sie die Datei test.cs, führen
gmcs test.cs
, dann gehen Sie zurück zum vorherigen Ziel, und führen Siegmcs test test.o
jetzt müssen Sie nicht haben test noch testen.o in Ihrem Verzeichnis, so meldet der Befehl einen Fehler.Was hat dich verwirrt (und ich konnte nur erraten, zu dieser) ist die c++ Datei. In c++ erstellen Sie zunächst Objekt-Dateien (.o in linux .obj in windows), dann verlinken Sie Sie. Ich bin mir nicht sicher, aber der Befehl in der c++ - makefile-Sie haben für eine .o Ziel war es, mit dem -c-flag - eine Flagge, die sagt gcc zu kompilieren. In Ihrem Fall wurde das Programm vollständig kompiliert, nachdem der erste Befehl.
So das makefile, die Sie suchen, ist die folgende:
wird, erstellen Sie eine Datei mit dem Namen test, und Sie könnten es mit
mono test
. wenn Sie möchten, dass das weglassen dermono
können Sie ein script erstellen, Datei:vergessen Sie nicht, um die Berechtigungen zu ändern, um Ihnen zu erlauben, es auszuführen!