CMake 没有找到 CxxTest 包
CMake does not find CxxTest package
为了使用CxxTest构建测试器,我写了下面的CMakeLists.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 没有找到,尽管我在 CMakeLists.txt
所在的目录中有文件夹 cxxtest 和文件 cxxtest/TestSuite.h
。
我已经查看了 FindCxxTest.cmake
的源代码,看看它能走多远,但它甚至没有找到路径 CXXTEST_INCLUDE_DIR
。
我是否必须设置其他搜索路径或其他内容?我正在 Windows.
上进行测试
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 源代码包含在源代码树中的固定位置,则根本不使用查找脚本,而是对路径进行硬编码。
乍一看这可能感觉像是一个肮脏的解决方案,但如果您真的可以依赖始终存在的资源,那么它实际上是解决这个问题的最干净、最可靠的方法。只有当您 而不是 说出文件在系统中的确切位置时,查找脚本才真正有意义。
为了使用CxxTest构建测试器,我写了下面的CMakeLists.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 没有找到,尽管我在 CMakeLists.txt
所在的目录中有文件夹 cxxtest 和文件 cxxtest/TestSuite.h
。
我已经查看了 FindCxxTest.cmake
的源代码,看看它能走多远,但它甚至没有找到路径 CXXTEST_INCLUDE_DIR
。
我是否必须设置其他搜索路径或其他内容?我正在 Windows.
上进行测试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 源代码包含在源代码树中的固定位置,则根本不使用查找脚本,而是对路径进行硬编码。
乍一看这可能感觉像是一个肮脏的解决方案,但如果您真的可以依赖始终存在的资源,那么它实际上是解决这个问题的最干净、最可靠的方法。只有当您 而不是 说出文件在系统中的确切位置时,查找脚本才真正有意义。