1

对于使用 vcpkg 安装的软件包,我很难找到要在 cmake 文件中使用的正确“库目标名称”。

例如,我gtest使用vcpkg install gtest. 我的示例 cmake 文件如下所示:

#CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(example)
add_executable(main main.cpp)
find_package(gtest REQUIRED)
target_link_libraries(main gtest) # here, "gtest" is not the right name! 

运行cmake,生成Visual Studio的解决方案,但运行后cmake --build .,我得到错误:

../use-cmake-vcpkg\main.cpp(1): fatal error C1083: Cannot open include file: 'gtest/gtest.h': No such file or directory ..

结果行:target_link_libraries(main gtest)不正确,我需要使用另一个“名称”来包含/链接 gtest 包。

有没有办法(使用 cmake 或 vcpkg)找出要使用的正确目标名称是什么?(在这种情况下适用于 gtest,但也适用于任何其他包装?)

4

1 回答 1

3

使用时find_package(XXX),它可以工作在两种模式:MODULECONFIG。并且此调用的结果变量和目标取决于 mode

如果FindXXX.cmake文件存在(并且可以找到),则使用MODULE模式并处理给定的文件。否则,如果软件包附带XXXConfig.cmake文件,则使用CONFIG模式并处理给定的文件。如果此文件不存在,CMake 会发出错误(如果使用REQUIRED关键字调用)或警告(没有REQUIRED关键字)。

gtest打包的情况下,CMake 是附带FindXXX.cmake脚本的,所以这个脚本是在MODULE模式下处理的。你可以在文档中找到这个脚本的描述,它告诉你需要使用GTest::GTesttarget 来链接 gtest:

target_link_libraries(main GTest::GTest)
于 2019-03-16T12:59:52.960 回答