CMake не находит пакет CxxTest

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

Я уже посмотрел в исходный код FindCxxTest.cmake чтобы увидеть, как далеко он идет, но он даже не находит путь CXXTEST_INCLUDE_DIR,

Должен ли я установить другой путь поиска или что-то? Я тестирую на Windows.

1 ответ

Решение

find_path не выполняет поиск в текущем каталоге. То есть то, что относительный путь доступен из текущего CMakeLists.txt, не означает, что он будет найден. Вы можете найти полное описание порядка поиска в руководстве.

Быстрое и грязное решение - добавить соответствующий каталог в ваш 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 переменные. Кроме того, некоторые скрипты find предоставляют возможность вставлять подсказки поиска, не загрязняя глобальные переменные (хотя FindCxxTest похоже не предлагает этого).

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

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

Другие вопросы по тегам