从Perl脚本执行C ++程序;它需要编译器吗?

时间:2014-02-17 13:52:08

标签: c++ perl header-files qx

这次我有一个更复杂的问题。我写了一个简短的Perl程序,我的最终输出是在一个数组中。我想在我的输出的每个元素上的Perl脚本中执行带有.hpp文件扩展名的C ++脚本(我已经从UCSC Genome Browser下载了源代码)。这对我来说真的很难,因为我是整体编程的初学者,对C ++一无所知。我做了一些阅读,我认为对我来说最好的是使用qx通话。我试过了,它只是在我运行Perl脚本时在文本编辑器中打开.hpp文件。我不确定这是不是因为我错误地指定.hpp文件扩展名要用编辑器打开,或者我是否需要编译器来运行.hpp文件。

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

2 个答案:

答案 0 :(得分:3)

.hpp文件是头文件,通常只包含宏和声明,而不是可执行代码。它用于指定.cpp文件中的代码接口,不能单独编译。

典型的C ++程序包含多个.cpp.hpp文件,这些文件必须组合编译,然后相互链接并与库文件链接以创建可执行映像。

所以是的,你确实需要一个编译器,还有更多!

答案 1 :(得分:0)

假设你在* nix上,你可以使用gcc工具在运行时首先通过perl脚本的system调用编译源代码,然后再进行一次系统调用来运行生成的可执行文件。

此外,除了Borodin的回答之外,即使您的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");

希望这有帮助。