我编写了以下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/TestSuite.h
存在的目录中有文件夹cxxtest和文件CMakeLists.txt
,但问题是找不到 CxxTest 。
我已经查看了FindCxxTest.cmake
的源代码,看看它有多远,但它甚至找不到路径CXXTEST_INCLUDE_DIR
。
我是否必须设置其他搜索路径?我正在Windows上进行测试。
答案 0 :(得分:1)
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源,则根本不使用查找脚本,而是硬编码路径。
一开始这可能感觉像是一个肮脏的解决方案,但如果你真的可以依赖源总是在那里,它实际上是解决这个问题最干净,最有力的方法。只有当不说明文件所在系统的确切位置时,查找脚本才有意义。