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_PATHCMAKE_INCLUDE_PATHCMAKE_LIBRARY_PATHCMAKE_PROGRAM_PATH 变量可以进行更细粒度的控制。此外,一些查找脚本提供了注入搜索提示的方法,而不必污染全局变量(尽管 FindCxxTest 似乎没有提供此功能)。

另一种选择是,如果您无论如何都将 CxxTest 源代码包含在源代码树中的固定位置,则根本不使用查找脚本,而是对路径进行硬编码。

乍一看这可能感觉像是一个肮脏的解决方案,但如果您真的可以依赖始终存在的资源,那么它实际上是解决这个问题的最干净、最可靠的方法。只有当您 而不是 说出文件在系统中的确切位置时,查找脚本才真正有意义。