3

CxxTestCMakeLists.txtを使用してテスターをビルドするために、次のように記述しました(これは、 によって提供されるほぼ標準的な例です)。FindCxxTest

cmake_minimum_required(VERSION 2.8)
project(tester)
set(CMAKE_INCLUDE_PATH "${CMAKE_CURRENT_SOURCE_DIR}")
find_package(CxxTest REQUIRED)
if(CXXTEST_FOUND)
    include_directories(${CXXTEST_INCLUDE_DIR})
    enable_testing()
    CXXTEST_ADD_TEST(tester_executable runner.cpp
                        ${CMAKE_CURRENT_SOURCE_DIR}/myTestsuite.h)
endif()

問題は、フォルダー cxxtest と存在するディレクトリ内のファイルがあるにもかかわらず、 CxxTestが見つからないことです。cxxtest/TestSuite.hCMakeLists.txt

のソースコードを調べて、FindCxxTest.cmakeどこまで到達するかを確認しましたが、パスさえ見つかりませんCXXTEST_INCLUDE_DIR

別の検索パスなどを設定する必要がありますか? Windowsでテストしています。

4

1 に答える 1

1

find_path現在のリスト ディレクトリは検索しません。つまり、現在の CMakeLists.txt から相対パスに到達できるからといって、それが見つかるとは限りません。検索順序の完全な説明については、マニュアルを参照してください。

手っ取り早い解決策は、それぞれのディレクトリを次のように追加することですCMAKE_PREFIX_PATH

 set(CMAKE_PREFIX_PATH ${CMAKE_CURRENT_LIST_DIR})
 find_package(CxxTest)

CMAKE_SYSTEM_PREFIX_PATHCMAKE_INCLUDE_PATHCMAKE_LIBRARY_PATHおよびCMAKE_PROGRAM_PATH変数を使用して、よりきめ細かい制御を行うことができます。また、一部の検索スクリプトは、グローバル変数を汚染することなく検索ヒントを挿入する手段を提供します (ただし、FindCxxTestこれは提供していないようです)。

もう 1 つのオプションは、CxxTest ソースをソース ツリーの固定された場所に含める場合、find スクリプトをまったく使用せず、代わりにパスをハードコーディングすることです。

これは最初は汚い解決策のように思えるかもしれませんが、ソースが常にそこにあることに本当に頼ることができるのであれば、これは実際にこれを解決するための最もクリーンで最も堅牢な方法です。検索スクリプトは、ファイルがシステム上のどこにあるかを正確に言うことができない場合にのみ意味があります。

于 2015-05-06T12:00:52.997 に答える