3

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 和存在的目录中的文件,但找不到CxxTestcxxtest/TestSuite.hCMakeLists.txt

我已经查看了的源代码,FindCxxTest.cmake看看它有多远,但它甚至没有找到路径CXXTEST_INCLUDE_DIR

我是否必须设置另一个搜索路径或其他东西?我在 Windows 上进行测试。

4

1 回答 1

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此外,一些查找脚本提供了注入搜索提示的方法,而不必污染全局变量(尽管FindCxxTest似乎不提供此功能)。

另一种选择是,如果您在源代码树中的固定位置包含 CxxTest 源代码,则根本不使用 find 脚本,而是硬编码路径。

起初这可能感觉像是一个肮脏的解决方案,但如果你真的可以依赖始终存在的源,它实际上是解决这个问题的最干净和最强大的方法。仅当您无法说出文件在系统上的确切位置时,查找脚本才真正有意义。

于 2015-05-06T12:00:52.997 回答