如何在Makefile.PL中检查C ++编译器?

时间:2014-04-17 02:40:27

标签: c++ perl

在Perl模块/发行版/包中,如何在" Makefile.PL"中测试是否存在正在运行的C ++编译器。并且如果C ++编译器不起作用则停止?

3 个答案:

答案 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的评论。你必须小心尽可能少地得到误报/否定,但这应该是可行的。当然,具体实施方式会根据您的环境而改变。

当然,如果您正在寻找特定的编译器,您可以检查文件以及特定于该编译器的文件,但是根据您的问题中缺少此类详细信息,您似乎正在寻找更通用的解决方案。