首页 > 解决方案 > 在宏内使用带有 CMake 的 find_package 的 Qt4 出现问题

问题描述

我在 CMake(版本 3.10)中定义了以下宏:

macro(configureQt4 requiredVersion selectedPackages)
    message(STATUS "selectedPackages: ${selectedPackages}")
    find_package(Qt4 ${requiredVersion} COMPONENTS ${selectedPackages} REQUIRED ) 
endmacro()

现在,当我尝试通过以下方式调用宏时,出现错误:

set(SelectedQt4Packages "QtCore QtNetwork")
configureQt4( 4.8 ${SelectedQt4Packages})

报告的错误是:

CMake Error at /usr/share/cmake-3.10/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
  Could NOT find Qt4 (missing: QT_QTCORE QTNETWORK_INCLUDE_DIR QT_QTCORE
  QTNETWORK_LIBRARY) (found suitable version "4.8.7", minimum required is
  "4.8")

如果我find_package()在宏内按以下方式调用,它可以工作!

find_package(Qt4 ${requiredVersion} COMPONENTS QtCore QtNetwork REQUIRED )

但是我需要通过设置一个变量来使用它,如前所述。我该如何解决这个问题?

标签: cmakeqt4cmake-language

解决方案


如果要在 CMake 中设置列​​表变量,可以通过排除引号来实现:

set(SelectedQt4Packages QtCore QtNetwork)

像这样使用引号"QtCore QtNetwork"只会在两个组件名称之间创建一个带有空格的字符串,这可能不是您想要的。

现在,您可以将SelectedQt4Packageslist 变量传递给您的宏,但请务必用引号将其括起来(如此答案中所建议的那样):

set(SelectedQt4Packages QtCore QtNetwork)
configureQt4( 4.8 "${SelectedQt4Packages}")

推荐阅读