2015-05-06 61 views
2

我寫的,以建立使用CxxTest測試儀(這幾乎是由FindCxxTest提供的標準的例子)以下CMakeLists.txt的CMake沒有找到CxxTest包

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和CMakeLists.txt存在的目錄內的文件cxxtest/TestSuite.h

我已經查看了FindCxxTest.cmake的源代碼,看它有多遠,但它甚至找不到路徑CXXTEST_INCLUDE_DIR

我必須設置另一個搜索路徑嗎?我正在Windows上測試。

回答

1

find_path不搜索當前列表目錄。也就是說,僅僅因爲可以從當前的CMakeLists.txt獲得相對路徑,並不意味着它會被找到。您可以在the manual中找到關於搜索順序的完整說明。

一個快速和骯髒的解決辦法是各自的目錄添加到您的CMAKE_PREFIX_PATH

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

更爲精細的控制通過CMAKE_SYSTEM_PREFIX_PATHCMAKE_INCLUDE_PATHCMAKE_LIBRARY_PATHCMAKE_PROGRAM_PATH變量是可用的。另外,一些查找腳本提供了注入搜索提示的方法,而不必污染全局變量(儘管FindCxxTest似乎沒有提供)。

另一種選擇是,如果無論如何將CxxTest源代碼包含在源代碼樹中的固定位置,則根本不使用查找腳本,而是硬編碼路徑。

起初這可能會讓人感覺像是一個骯髒的解決方案,但如果您真的可以依賴始終存在的資源,那實際上就是解決這個問題的最乾淨和最可靠的方法。查找腳本真的只有在您可以而不是說明文件所在系統的確切位置時纔有意義。

+0

我試過你的快速和骯髒的解決方案,但它不起作用。在我的問題的例子中,我也設置了變量'CMAKE_INCLUDE_PATH',但這也沒有幫助。 – cwde

+0

@cwde仔細檢查您的路徑。查找腳本使用'find_path(CXXTEST_INCLUDE_DIR cxxtest/TestSuite.h)',如果找到'$ {CMAKE_PREFIX_PATH}/cxxtest/TestSuite.h',這將起作用。請注意,這隻會設置'CXXTEST_INCLUDE_DIR'變量而沒有別的。特別是'CXXTEST_FOUND'之後可能仍然是錯誤的。爲完整的查找腳本通過,爲缺失的組件應用類似的修復。 – ComicSansMS