5

私は現在、最初の重要な CMake プロジェクトを作成しようとしていますが、FIND_PACKAGE() の出力を調べることができません。なぜなら、それが期待するグローバル変数に値を割り当てているように見えないからです! たとえば、次のコード:

MESSAGE("CMake version: ${CMAKE_VERSION}")
FIND_PACKAGE(Armadillo)
IF(Armadillo_FOUND)
    MESSAGE("Found Armadillo.")
    MESSAGE("Armadillo include dir is: ${ARMADILLO_INCLUDE_DIR}")
    MESSAGE("Armadillo lib's to be linked against: ${Armadillo_LIBRARIES}")
    MESSAGE("Armadillo lib version: ${PACKAGE_FIND_VERSION}")
ENDIF(Armadillo_FOUND)

次の端末出力を生成します

/build]$ CMake version: 2.6.4
/build]$ Found Armadillo.
/build]$ Armadillo include dir is:
/build]$ Armadillo lib's to be linked against:
/build]$ Armadillo lib version:

これは非常に基本的なことですが、すべてのチュートリアルから、これは有用な出力を生成するはずです。何か案は??

4

2 に答える 2

4

arrowdodger に感謝します。あなたの回答は役に立ちましたが、これは正確には問題ではありません。問題は、FIND_PACKAGE(Armadillo) を実行した後、これらの変数のどれも (ARMADILLO_FOUND 変数でさえも) 設定されないことです。Armadillo_FOUND (小文字に注意) 変数が設定されており、cmake モジュール ファイルではなく FIND_PACKAGE() 関数によって設定されているようです。

モジュール ファイルをディレクトリにコピーし、FIND_PACKAGE() コマンドの代わりに INCLUDE() コマンドを使用して呼び出すと、問題を特定できました。Armadillo 2.2.3 で cmake 2.6.4 を使用することに関連しているようです (どちらも古いバージョンですが、システムの分散ビルドによって制限されています)。私は Armadillo をインストールしており、Find_PACKAGE() はこれを検出しているように見えますが (Armadillo_FOUND を true に設定)、モジュール ファイルの次の行は失敗します (そのように記述されています)。

# Checks 'REQUIRED', 'QUIET' and versions.
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Armadillo
  REQUIRED_VARS ARMADILLO_LIBRARY ARMADILLO_INCLUDE_DIR
  VERSION_VAR ARMADILLO_VERSION_STRING)
# version_var fails with cmake < 2.8.4

FIND_PACKAGE() はこの行では失敗していないようです。上記のように、FIND_PACKAGE() は Armadillo_FOUND を true に設定しますが、モジュール ファイルに設定されたすべての変数は、この失敗のために CMakeLists.txt ファイルに反映されません。上記のリストから VERSION_VAR を削除すると、問題が修正されました。もちろん、より良い修正は cmake と armadillo を更新することですが、これは私にとっては選択肢ではありません :(

于 2012-08-14T14:26:32.900 に答える
3

FindArmadillo.cmake に次のコメントがあります。

# The following variables are set when ARMADILLO is found:
#  HAVE_ARMADILLO       = Set to true, if all components of ARMADILLO have been
#                         found.
#  ARMADILLO_INCLUDES   = Include path for the header files of ARMADILLO
#  ARMADILLO_LIBRARIES  = Link these to use ARMADILLO
#  ARMADILLO_LFLAGS     = Linker flags (optional)
于 2012-08-13T17:44:09.160 に答える