在Perl模块/发行版/包中,如何在" Makefile.PL"中测试是否存在正在运行的C ++编译器。并且如果C ++编译器不起作用则停止?
答案 0 :(得分:2)
ExtUtils::CppGuess就是为了这个目的而编写的。它并不完美,但可以在大多数常见平台上运行。
答案 1 :(得分:1)
你可以按照here所述做autoconfig所做的事情。他们在路径中查找shell变量CXX
然后CCC
,然后查找路径中的g++
路径中的二进制c++
。他们没有测试的是clang ++或microsoft的编译器,但这个功能可以很容易地在perl中复制。
@path = split(/:/, $ENV{"PATH"} );
$CXX = $ENV{"CXX"} || $ENV{"CCC"} || undef;
if (!defined($CXX)){
foreach my $path(reverse(@path)){
my $test = $path . "/g++";
if ( -e $test){
$CXX = $test ;
break;
}
}
}
print $CXX . "\n"
如果需要查找其他编译器,您可以通过添加aditional if语句轻松修改代码以测试它们。另外,如果您想搜索系统PATH
以外的地方,可以将可能的目录追加到@path
。
答案 2 :(得分:-1)
我会在推荐使用grep来寻找编译器时提出Mohit Jain的评论。你必须小心尽可能少地得到误报/否定,但这应该是可行的。当然,具体实施方式会根据您的环境而改变。
当然,如果您正在寻找特定的编译器,您可以检查文件以及特定于该编译器的文件,但是根据您的问题中缺少此类详细信息,您似乎正在寻找更通用的解决方案。