Выполнение программы C++ из Perl-скрипта; это требует компилятора?

На этот раз у меня несколько более сложный вопрос. Я написал короткую программу на Perl, где мой окончательный вывод находится в массиве. Я хочу выполнить сценарий C++ с расширением файла .hpp в моем сценарии Perl для каждого элемента моего вывода (я загрузил исходный код из браузера генома UCSC). Это действительно сложно для меня, так как я новичок в программировании в целом и ничего не знаю о C++. Я кое-что прочитал и думаю, что лучше всего для меня использовать вызов qx. Я пробовал это, и он просто открывает файл .hpp в текстовом редакторе, когда я запускаю свой Perl-скрипт. Я не уверен, связано ли это с тем, что я ошибочно назначил расширение файла .hpp для открытия с помощью редактора, или мне нужен компилятор для запуска файлов .hpp в целом.

my $info = qx(primercheck.hpp);
print "primercheck.hpp is: $info\n";

person user3309360    schedule 17.02.2014    source источник
comment
Я только что понял, что строго не задавал вопрос... Итак; нужен ли мне компилятор для выполнения файла C++ .hpp из программы Perl? Большое спасибо :)   -  person user3309360    schedule 17.02.2014
comment
Скрипт C++ - это скрипт или исходный код?   -  person parrowdice    schedule 17.02.2014
comment
Тогда, вообще говоря, его нужно будет скомпилировать в какую-либо форму исполняемого файла (если вы не найдете программу, которая будет правильно интерпретировать ваш исходный код как скрипт и выполнять его, и в этом случае вы должны запустить эту программу, передав ей свой исходный файл. Там не является стандартным способом сделать это, вы будете полагаться на сторонние приложения).   -  person parrowdice    schedule 17.02.2014
comment
Спасибо! Я прочитаю об этом.   -  person user3309360    schedule 17.02.2014
comment
Вы можете найти Inline::CPP полезным, хотя он по-прежнему требует компилятора и разумного понимания того, как работать в среде целевого языка.   -  person DavidO    schedule 17.02.2014


Ответы (2)


Файл .hpp — это заголовочный файл, который обычно содержит только макросы и объявления, а не исполняемый код. Он используется для указания интерфейса для кода в .cpp файлах и не может быть скомпилирован сам по себе.

Типичная программа на C++ состоит из нескольких файлов .cpp и .hpp, которые должны быть скомпилированы в комбинации, а затем связаны друг с другом и с библиотечными файлами для создания исполняемого образа.

Так что да, вам нужен компилятор и многое другое!

person Borodin    schedule 17.02.2014
comment
О, ну... В таком случае, прежде чем пробовать что-то еще, я хорошенько почитаю. Я просто надеялся на более простой способ, поэтому мне не нужно слишком много изучать C++ :) Тем не менее, большое спасибо! - person user3309360; 17.02.2014

Предполагая, что вы используете *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");

Надеюсь это поможет.

person Jenson Jose    schedule 17.02.2014