2015-05-06 2 views
2

Я написал следующее CMakeLists.txt для того, чтобы построить тестер с помощью CxxTest (это почти стандартный пример обеспечивается FindCxxTest):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 и файл cxxtest/TestSuite.h внутри каталога, где существует CMakeLists.txt.

Я уже изучил исходный код 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_PATH, CMAKE_INCLUDE_PATH, CMAKE_LIBRARY_PATH и CMAKE_PROGRAM_PATH. Кроме того, некоторые сценарии поиска предоставляют средства для ввода подсказок для поиска, не загрязняя глобальные переменные (хотя FindCxxTest, похоже, не предлагает этого).

Другой вариант, если вы в любом случае включите источники CxxTest в фиксированное место в исходном дереве, чтобы не использовать скрипт поиска вообще, но вместо этого укажите hardcode.

Сначала это может показаться грязным решением, но если вы действительно можете полагаться на источники, всегда находящиеся там, это на самом деле самый чистый и самый надежный способ решить эту проблему. Найти сценарии действительно имеет смысл только тогда, когда вы можете не сказать, где именно в системе находятся файлы.

+0

Я пробовал ваше быстрое и грязное решение, но оно не работает. В примере моего вопроса я также установил переменную 'CMAKE_INCLUDE_PATH', но это тоже не помогло. – cwde

+0

@cwde Дважды проверьте свои пути. В скрипте find используется 'find_path (CXXTEST_INCLUDE_DIR cxxtest/TestSuite.h)', который будет работать, если найден '$ {CMAKE_PREFIX_PATH}/cxxtest/TestSuite.h'. Обратите внимание, что это установит только переменную 'CXXTEST_INCLUDE_DIR' и ничего больше. В частности, 'CXXTEST_FOUND', скорее всего, по-прежнему будет ложным. Примените аналогичные исправления для отсутствующих компонентов до тех пор, пока не пройдет полный скрипт find. – ComicSansMS