У меня очень мало опыта работы с Ruby, и я пытался создать простую формулу доморощенного. У меня был простой тестовый проект со следующей структурой
.
├── Makefile
└── test.cpp
0 directories, 2 files
И тогда у меня есть следующее .rb
файл формулы
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
Запутанная часть здесь состоит в том, что первые две прокомментированные строки system
работает, чтобы установить пакет, но третий не делает, есть идеи, почему? Если я попробую третью строку, я получу ошибку
==> g++ -std=c++14 -O3 -Wall -Werror -Wextra -pedantic -Wvla test.cpp -o testbrew
Error: No such file or directory - testbrew
Также в качестве продолжения, есть определенные вещи, которые вызывает функция system()
не позволяет пользователю делать? есть ли какие-либо ограничения безопасности (например, с ptrace
)?
Ваш аргумент "-o testbrew"
неправильно. Это разбирает как -o
с возможностью " testbrew"
в том числе космос. Это возможно только потому, что system
с множественными аргументами обходит обычный синтаксический анализ оболочки, вы несете прямую ответственность за правильное разбиение аргументов.
Вы неправильно изложили другие аргументы. Я бы порекомендовал сделать это так:
"-o", "testbrew"
Других решений пока нет …