2016-12-28 3 views
0

Ich habe sehr sehr wenig Erfahrung mit Ruby und ich versuchte, eine einfache Homebrew-Formel zu bauen. Ich hatte ein einfaches Testprojekt mit der folgenden StrukturErstellen einer C++ - Formel für Homebrew

. 
├── Makefile 
└── test.cpp 

0 directories, 2 files 

Und dann habe ich die folgende .rb Formel Datei

class Testbrew < Formula 
    desc "" 
    homepage "" 
    url "" 
    version "" 
    head "" 
    sha256 "" 

    def install 
    # system "make" 
    # system("g++ -std=c++14 -O3 test.cpp -o testbrew") 
    system "g++", "-std=c++14", 
      "-O3", 
      "-Wall", 
      "-Werror", 
      "-Wextra", 
      "-pedantic", 
      "-Wvla", 
      "test.cpp", 
      "-o testbrew" 
    bin.install "testbrew" 
    ohai("Done!") 
    end 
end 

Das verwirrende Teil ist, dass die ersten beiden Zeilen der system Arbeit kommentiert die Installation Paket aber das dritte nicht, keine Ahnung warum? Wenn ich die dritte Linie versuche ich den Fehler

==> g++ -std=c++14 -O3 -Wall -Werror -Wextra -pedantic -Wvla test.cpp -o testbrew 
Error: No such file or directory - testbrew 

Auch als Followup, gibt es bestimmte Dinge, dass der Funktionsaufruf system() dem Benutzer nicht erlauben, zu tun? d. h. gibt es Sicherheitsbeschränkungen (zum Beispiel mit ptrace)?

+0

'system' nicht Ihre' bash_profile' darüber im Klaren sein, vielleicht 'testbrew' ist nicht auf die' PATH' hinzugefügt zu werden, wie es regelmäßig tut. Vielleicht versuche ich einen absoluten Weg zu gehen. Siehe http://stackoverflow.com/questions/28555822/how-do-i-make-rubys-system-call-aware-of-my-bash-profile-aliases –

+0

@maxple aber wie funktioniert dann das zweite 'System () Call-Arbeit in der gleichen Situation? Die zweite funktioniert gut und 'bin.install' kann sie in das benötigte Verzeichnis kopieren – Curious

+0

dunno. Viel Glück –

Antwort

1

Ihr Argument "-o testbrew" ist falsch. Das parst als -o mit der Option " testbrew"einschließlich den Raum. Dies ist nur möglich, weil system mit mehreren Argumenten das normale Shell-Parsing umgeht. Sie sind direkt für das korrekte Teilen von Argumenten verantwortlich.

Sie haben die anderen Argumente richtig gelöst. Ich würde empfehlen, es auf diese Weise tun:

"-o", "testbrew" 
Verwandte Themen