1

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 )

ただし、前述のように変数を設定して使用する必要があります。この問題を解決するにはどうすればよいですか?

4

2 に答える 2

2

CMake でリスト変数を設定する場合は、引用符を除外することでこれを実現できます。

set(SelectedQt4Packages QtCore QtNetwork)

このように引用符を使用"QtCore QtNetwork"すると、2 つのコンポーネント名の間にスペースを含む文字列が作成されますが、これはおそらく意図したものではありません。

SelectedQt4Packagesこれで、リスト変数をマクロに渡すことができますが、必ず引用符で囲んでください (この回答で提案されているように):

set(SelectedQt4Packages QtCore QtNetwork)
configureQt4( 4.8 "${SelectedQt4Packages}")
于 2019-11-15T12:51:08.980 に答える