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

How can I check for a C++ compiler in Makefile.PL?

本文关键字:C++ 编译器 PL 检查 Makefile      更新时间:2023-10-16

在Perl模块/分发/包中,如何在"Makefile.PL"中测试是否存在正在运行的C++编译器,并在C++编译器不运行时停止?

ExtUtils:CppGuess正是为了这个目的而编写的。它并不完美,但可以在大多数常见的平台上运行。

您可以按照这里描述的方式执行自动配置。他们在路径中查找外壳变量CXX,然后查找CCC,然后查找二进制g++,然后查找路径中的c++。他们没有测试clang++或微软的编译器,但这个功能可以很容易地在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"

如果需要查找其他编译器,您也可以通过添加可选的If语句来轻松地修改代码以测试它们。另外,若您想搜索系统PATH以外的位置,可以将可能的目录附加到@path

我赞同Mohit Jain的评论,建议使用grep来寻找编译器。你必须小心,尽可能少地得到假阳性/假阴性,但这应该是可行的。当然,具体的实现方式会根据您的环境而变化。

当然,如果你正在寻找一个特定的编译器,你可以检查文件和该编译器的特定文件,但从你的问题中缺乏这些细节来看,你似乎在寻找一个更通用的解决方案。