【问题标题】:Check if executable is in the PATH using qmake使用 qmake 检查可执行文件是否在 PATH 中
【发布时间】:2015-07-21 15:53:35
【问题描述】:

我的*.pro 文件中有一个自定义构建目标:

docs.commands = doxygen $$PWD/../docs/Doxyfile

QMAKE_EXTRA_TARGETS += docs
POST_TARGETDEPS += docs

作为构建后事件运行Doxygen。问题是,如果有人构建了项目并且没有安装doxygen,那么构建就会失败。是否可以检查构建项目的机器上是否安装了doxygen,以便仅在安装doxygen并将其添加到系统PATH时运行doxygen命令?

【问题讨论】:

    标签: qt qt5 doxygen qmake


    【解决方案1】:

    使用 qmake,你可以试试这个:

    DOXYGEN_BIN = $$system(which doxygen)
    
    isEmpty(DOXYGEN_BIN) {
            message("Doxygen not found")
    }
    

    另一个选项可能是以下一个:

    DOXYGEN_BIN = $$system( echo $$(PATH) | grep doxygen )
    
    isEmpty(DOXYGEN_BIN) {
            message("Doxygen not found")
    }
    

    顺便说一句,如果您使用的是 CMake

    您可以使用

    find_package(Doxygen)
    

    例子:

    FIND_PACKAGE(Doxygen)
    if (NOT DOXYGEN_FOUND)
        message(FATAL_ERROR "Doxygen is needed to build the documentation.")
    endif()
    

    您可以在本网站获得更多信息:

    http://www.cmake.org/cmake/help/v3.0/module/FindDoxygen.html

    【讨论】:

    • 嗯,不过是关于CMake 的问题吗?是关于 qmake
    • 这对CMake 非常有用,但不幸的是我目前没有使用CMake,只是QMakeQMake 有类似的东西吗?还是我没听懂?
    • 哦...对不起:(我的错!
    • @Tarod Np,保留它,IMO 这也很有用。
    • @Tarod 很有魅力,谢谢!顺便说一句,如果使用 Windows,可以使用 where 而不是 which 来实现相同的目的。
    【解决方案2】:

    在你的 .pro 文件上试试这个:

    # Check if Doxygen is installed on the default Windows location
    win32 {
        exists( "C:\Program Files\doxygen\bin\doxygen.exe" ) {
            message( "Doxygen exists")
            # execute your logic here
        }
    }
    # same idea for Mac
    macx {
        exists( "/Applications/doxygen.app/ ... " ) {
            message( "Doxygen exists")
        }
    }
    

    更新

    使用@Tarod 答案,您可以使其与以下内容交叉兼容

    # Check if Doxygen is installed on Windows (tested on Win7)
    win32 {
        DOXYGEN_BIN = $$system(where doxygen)
    
        isEmpty(DOXYGEN_BIN) {
            message("Doxygen not found")
            # execute your logic here
        } else {
            message("Doxygen exists in " $$DOXYGEN_BIN)
        }
    }
    
    # Check if Doxygen is installed on Linux or Mac (tested on Ubuntu, not yet on the Mac)
    unix|max {
        DOXYGEN_BIN = $$system(which doxygen)
    
        isEmpty(DOXYGEN_BIN) {
            message("Doxygen not found")
            # execute your logic here
        } else {
            message("Doxygen exists in " $$DOXYGEN_BIN)
        }
    }
    

    【讨论】:

    • 如果用户将doxygen 安装在默认目录之外的另一个目录中怎么办?难道不能检查PATH变量来确定吗?
    【解决方案3】:

    Qt 文档说:

    要在运行 qmake 时获取环境值的内容,请使用 $$(...) 运算符...

    即:

    PATH_VAR = $$(PATH)
    DOXYGEN = "doxygen"
    contains(PATH_VAR, DOXYGEN) {
        message("Doxygen found")
    }
    

    【讨论】:

    • AFAIK PATH_VAR 必须是一个由空格分隔的列表才能使其正常工作。我刚刚测试了,它不起作用。
    • @JacobKrieg,如果你把它和$$split($$(PATH), " ")分开呢?
    • @JacobKrieg 我刚刚更新了我的答案。这有点棘手:)
    猜你喜欢
    • 1970-01-01
    • 2013-03-09
    • 2011-09-28
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多