У меня есть несколько более сложный вопрос на этот раз. Я написал короткую программу на Perl, где мой конечный результат находится в массиве. Я хочу выполнить скрипт C ++ с расширением .hpp внутри моего скрипта Perl для каждого элемента моего вывода (я скачал исходный код из браузера UCSC Genome). Это действительно сложно для меня, так как я новичок в программировании в целом и ничего не знаю о C ++. Я немного почитал и думаю, что для меня лучше всего использовать вызов qx. Я попробовал это, и он просто открывает .hpp файл в текстовом редакторе, когда я запускаю свой Perl-скрипт. Я не уверен, что это потому, что я ошибочно назначил расширение файла .hpp для открытия в редакторе или мне нужен компилятор для запуска файлов .hpp в целом.
my $info = qx(primercheck.hpp);
print "primercheck.hpp is: $info\n";
.hpp
file — это заголовочный файл, который обычно содержит только макросы и объявления, а не исполняемый код. Используется для указания интерфейса для кода в .cpp
файлы и не могут быть скомпилированы самостоятельно.
Типичная программа на C ++ состоит из нескольких .cpp
а также .hpp
файлы, которые должны быть скомпилированы в комбинации, а затем связаны друг с другом и с библиотечными файлами для создания исполняемого образа.
Так что да, вам нужен компилятор, и многое другое!
Предполагая, что вы используете * nix, вы можете использовать gcc
инструмент для первой компиляции исходного кода во время выполнения, через system
вызов из вашего сценария Perl, а затем сделать еще один системный вызов для запуска сгенерированного исполняемого файла.
Кроме того, в дополнение к ответу Бородина, даже если ваш файл с hpp
Расширение имеет исполняемый код, оно может быть скомпилировано, но не будет выполнено. Обходной путь должен был бы сделать временную копию источника и дать ему cpp
расширение и скомпилируйте его, чтобы получить исполняемый файл, который вы можете вызвать из вашего скрипта perl. Тем не менее, это требует вашего hpp
файл на самом деле имеет исполняемый код, если вы хотите какой-либо вывод. Вот пример,
# make a temp copy with cpp extension
system("cp primercheck.hpp primercheck.cpp");
# generate executable using gcc
system("gcc -o primercheck primercheck.cpp");
# set execute permissions on resulting file
system("chmod +x primercheck");
# call the executable
system("./primercheck");
# remove the temp cpp file
system("rm primercheck.cpp");
# optional - remove the executable file as well
system("rm primercheck");
Надеюсь это поможет.