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