我编写了以下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 ,尽管在存在CMakeLists.txt的目录中有cxxtest文件夹和cxxtest/TestSuite.h文件。
我已经查看了FindCxxTest.cmake的源代码,看看它有多远,但它甚至没有找到路径CXXTEST_INCLUDE_DIR。
我需要设置另一条搜索路径吗?我在Windows上测试。
发布于 2015-05-06 12:00:52
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源,则根本不使用查找脚本,而是对路径进行硬编码。
乍一看,这可能是一种肮脏的解决方案,但如果您真的可以依赖始终存在的源,那么它实际上是解决这个问题的最干净和最健壮的方法。只有当您不能说出文件在系统上的确切位置时,才能真正找到脚本。
https://stackoverflow.com/questions/30068164
复制相似问题