Qt 使用qmake检查可执行文件是否在路径中

Qt 使用qmake检查可执行文件是否在路径中,qt,qt5,doxygen,qmake,Qt,Qt5,Doxygen,Qmake,我的*.pro文件中有一个自定义构建目标: docs.commands = doxygen $$PWD/../docs/Doxyfile QMAKE_EXTRA_TARGETS += docs POST_TARGETDEPS += docs 它作为生成后事件运行Doxygen。问题是,如果有人构建了项目,但没有安装doxygen,构建就会失败。是否可以检查生成项目的计算机上是否安装了doxygen,以便仅当安装了doxygen并将其添加到系统PATH时,我才运行doxygen命令 DOXYG

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

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

QMAKE_EXTRA_TARGETS += docs
POST_TARGETDEPS += docs

它作为生成后事件运行
Doxygen
。问题是,如果有人构建了项目,但没有安装
doxygen
,构建就会失败。是否可以检查生成项目的计算机上是否安装了
doxygen
,以便仅当安装了
doxygen
并将其添加到系统
PATH
时,我才运行
doxygen
命令

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()
您在此网站上有更多信息:


在.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 answer,您可以使其与以下内容交叉兼容

# 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)
    }
}
Qt文档说:

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

i、 e:


嗯,但问题是关于
CMake
?这是关于qmake的。这对于
CMake
来说非常好,但不幸的是,我目前没有使用
CMake
,只使用
qmake
。对于
QMake
,是否有类似的功能?还是我不太明白?哦。。。对不起的:(我的错!@Tarod Np,保留它,在我看来这也很有用。@Tarod工作得很好,谢谢!顺便说一句,如果使用Windows,可以使用
where
,而不是
which
,来实现同样的效果。如果用户将
doxygen
安装在默认目录之外的另一个目录中,会怎么样?难道不能检查PATH变量以确定t?AFAIK
PATH\u VAR
必须是一个用空格分隔的列表才能工作。我刚刚测试过,但它不工作。@JacobKrieg,如果你用
$$split($$(PATH),“”)
?@JacobKrieg我刚刚更新了我的答案。这有点棘手:)
PATH_VAR = $$(PATH)
DOXYGEN = "doxygen"
contains(PATH_VAR, DOXYGEN) {
    message("Doxygen found")
}