将Catch与CMake集成非常简单,因为它是一个仅包含头文件的库。
以下是您需要执行的快速概述:
您可以假设Catch源已经安装在构建机器上,或者使用ExternalProject作为构建过程的一部分来获取它们。
无论哪种情况,您都会在构建机器上的某个已知目录中拥有Catch头文件。我建议创建一个接口目标,以便向测试可执行文件公开此信息:
add_library(Catch INTERFACE)
target_include_directories(Catch INTERFACE ${YOUR_CATCH_INCLUDE_DIR})
这样,您可以直接将Catch作为依赖项指定给target_link_libraries
:
add_executable(my_test ${MY_TEST_SOURCES})
target_link_libraries(my_test PUBLIC Catch)
像往常一样,使用CMake时,add_test
负责将测试引入CTest:
enable_testing()
add_test(NAME MyAwesomeTest COMMAND my_test)
就是这样了。在构建的项目上运行make test
以运行您的测试。
如果您需要查看完整的工作示例,我在Github上有一个项目可以实现这一点。
针对较新版本的Catch更新: 如果您已经升级到Catch2,则该软件包附带其自己的软件包配置文件,因此您只需调用 find_package
来集成它即可。 这提供了更顺畅的CMake集成,您不必开始定义自己的接口目标。 尽管上面的方法即使使用Catch2仍将起作用,但如果您的Catch版本已经支持它,请使用find_package
。
catch
不需要链接... 它是一个仅包含头文件的库。那么为什么要写 target_link_libraries
呢? - SandburgCMake
(2.6)、现代 CMake
(3.0) 还是 更现代的 CMake
(3.10)? - Sandburg使用以下命令安装Catch:
$ git clone https://github.com/catchorg/Catch2 <catch_src_dir>
$ mkdir <catch_bin_dir>
$ cd <catch_bin_dir>
$ cmake -DBUILD_TESTING:BOOL=FALSE <catch_src_dir>
$ make
$ make install
然后在 CMakeLists.txt 文件中添加以下内容:
find_package(Catch2 REQUIRED)
target_link_libraries(tests Catch2::Catch2)
请查看 此处。