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