4

私のプロジェクトは、valgrind 抑制ファイルと CMake スクリプトが付属するサードパーティ ライブラリにリンクしています。スクリプトは、抑制ファイルの場所を CMake キャッシュ変数に格納します。

プロジェクトで継続的なテストを実行し、ダッシュボードに送信する CTest スクリプトを作成しました。メモリ チェック段階で抑制ファイルを使用したいと考えています。残念ながら、CTest スクリプトは CMake キャッシュについて何も認識していないようです。CTest スクリプトから CMake キャッシュ変数にアクセスするにはどうすればよいですか?

4

2 に答える 2

3

ctest -S スクリプトから CMake キャッシュ変数に直接アクセスすることはできません。

ただし、次の可能性があります。

  1. ctest -S スクリプトに「include」を使用してサード パーティの CMake スクリプトを含めます (更新手順の後、ソース ツリーは最新になります)。
  2. 構成ステップの後に CMakeCache.txt ファイルを読み取って、対象のキャッシュ変数を引き出します。
  3. CMakeLists.txt ファイルにコードを追加して、探している情報だけを含むミニスクリプトを書き出す

(1) の場合、コードは次のようになります。

include(${CTEST_SOURCE_DIRECTORY}/path/to/3rdParty/script.cmake)

これは、スクリプトが参照可能な変数値の設定などの単純なことのみを実行する場合にのみ、現実的に可能になります。find_library や add_executable などの CMake-configure-time を行う場合は、これを行うべきではありません。

(2) の場合:

file(STRINGS ${CTEST_BINARY_DIRECTORY}/CMakeCache.txt result
  REGEX "^CURSES_LIBRARY:FILEPATH=(.*)$")
message("result='${result}'")
string(REGEX REPLACE "^CURSES_LIBRARY:FILEPATH=(.*)$" "\\1"
  filename "${result}")
message("filename='${filename}'")

(3) の場合:

CMakeLists.txt ファイル内:

file(WRITE "${CMAKE_BINARY_DIR}/mini-script.cmake" "
  set(supp_file \"${supp_file_location}\")
")

ctest -S スクリプトで、ctest_configure 呼び出しの後:

include("${CTEST_BINARY_DIRECTORY}/mini-script.cmake")
message("supp_file='${supp_file}'")
# use supp_file as needed in the rest of your script
于 2012-08-24T14:41:28.687 に答える
0

テストはCMakeLists.txt、コマンドを使用してファイルに構成する必要がありますADD_TEST()。次に、CTest スクリプトはctest_test()、構成されたすべてのテストを実行するために呼び出すだけです。このようにすることで、キャッシュ変数にアクセスできるようになり、さらにmake test、いつでも実行してテストを実行できます。夜間のテストおよび/またはダッシュボードの提出用に CTest スクリプトを保存します。

于 2012-08-24T13:59:54.403 に答える